refactoring: static is evil

This commit is contained in:
rusefillc 2021-01-09 17:13:36 -05:00
parent ec1876e116
commit e12747ca05
4 changed files with 73 additions and 70 deletions

View File

@ -0,0 +1,57 @@
package com.rusefi.pcb;
import java.util.HashMap;
import java.util.Map;
public class Networks {
/**
* Net name > Net Id
*/
private final Map<String, Integer> networks = new HashMap<>();
private final Map<Integer, String> nameById = new HashMap<>();
/**
* @param name current name
* @return new name for local network
*/
public String registerNetworkIfPcbSpecific(String name) {
if (isLocalNetwork(name)) {
String newName = "F-0000" + networks.size();
PcbMergeTool.log("Board-specific net: " + name + " would be " + newName);
registerNet(newName);
int newId = networks.get(newName);
PcbMergeTool.log(newName + " is " + newId);
return newName;
} else {
if (networks.containsKey(name)) {
PcbMergeTool.log("Existing global net: " + name);
return name;
}
PcbMergeTool.log("New global net: " + name);
registerNet(name);
return name;
}
}
public static boolean isLocalNetwork(String name) {
return name.startsWith("N-00");
}
private void registerNet(String name) {
networks.put(name, networks.size());
nameById.put(networks.get(name), name);
}
public int getId(String localName) {
Integer value = networks.get(localName);
if (value == null)
throw new NullPointerException("No id for " + localName);
return value;
}
public String getNameById(int networkId) {
return nameById.get(networkId);
}
}

View File

@ -18,7 +18,6 @@ public class PcbMergeTool {
public static final String TOKEN_GR_LINE = "gr_line";
public static final String TOKEN_GR_TEXT = "gr_text";
public static final String TOKEN_MODULE = "module";
private static Networks networks = new Networks();
public static void main(String[] args) throws IOException {
if (args.length != 3) {
@ -30,6 +29,7 @@ public class PcbMergeTool {
String changes = args[2];
ChangesModel.readConfiguration(changes);
Networks networks = new Networks();
log("Running COPY commands");
for (TwoFileRequest or : ChangesModel.getInstance().COPY_REQUESTS)
@ -52,7 +52,7 @@ public class PcbMergeTool {
for (NameAndOffset addRequest : ChangesModel.getInstance().ADD_REQUESTS) {
PcbNode node = PcbMoveTool.readAndMove(addRequest.getName(), addRequest.x, addRequest.y);
mergePcb(destNode, node);
mergePcb(destNode, node, networks);
}
log("Running MOVE commands");
@ -84,7 +84,7 @@ public class PcbMergeTool {
return null;
}
static void mergePcb(PcbNode destNode, PcbNode source) {
static void mergePcb(PcbNode destNode, PcbNode source, Networks networks) {
/**
* original local net ID (as string) > new net ID
*/
@ -132,7 +132,7 @@ public class PcbMergeTool {
for (PcbNode pad : module.iterate(TOKEN_PAD)) {
if (!pad.hasChild(TOKEN_NET))
continue;
fixNetId(netIdMapping, pad);
fixNetId(networks, netIdMapping, pad);
// PcbNode net = pad.find("net");
// String localName = netNameMapping.get(net.getChild(1));
// net.setString(1, localName);
@ -146,7 +146,7 @@ public class PcbMergeTool {
for (PcbNode segment : segments) {
// if (!segment.hasChild(TOKEN_NET))
// continue;
fixNetId(netIdMapping, segment);
fixNetId(networks, netIdMapping, segment);
destNode.addChild(segment);
}
@ -154,7 +154,7 @@ public class PcbMergeTool {
List<PcbNode> pads = source.iterate(TOKEN_PAD);
log("Processing " + pads.size() + " pads");
for (PcbNode pad : pads) {
fixNetId(netIdMapping, pad);
fixNetId(networks, netIdMapping, pad);
destNode.addChild(pad);
}
@ -162,7 +162,7 @@ public class PcbMergeTool {
List<PcbNode> vias = source.iterate(TOKEN_VIA);
log("Processing " + vias.size() + " vias");
for (PcbNode via : vias) {
fixNetId(netIdMapping, via);
fixNetId(networks, netIdMapping, via);
destNode.addChild(via);
}
@ -191,21 +191,16 @@ public class PcbMergeTool {
return false;
}
private static void fixNetId(Map<String, Integer> netIdMapping, PcbNode node) {
private static void fixNetId(Networks networks, Map<String, Integer> netIdMapping, PcbNode node) {
NetNode net = node.find(TOKEN_NET);
String originalId = net.id;
Integer currentNetId = netIdMapping.get(originalId);
String globalName = networks.nameById.get(currentNetId);
// String newName = netNameMapping.get(originalName);
// if (newName == null)
// throw new NullPointerException("?");
String globalName = networks.getNameById(currentNetId);
if (ChangesModel.getInstance().NET_MERGE_REQUESTS.containsKey(globalName)) {
String newName = ChangesModel.getInstance().NET_MERGE_REQUESTS.get(globalName);
log("Will merge " + globalName + " into " + newName + ". ID was " + currentNetId);
currentNetId = networks.networks.get(newName);
if (currentNetId == null)
throw new NullPointerException("Cannot find net: " + newName);
currentNetId = networks.getId(newName);
log("New ID: " + currentNetId);
globalName = newName;
}
@ -214,55 +209,6 @@ public class PcbMergeTool {
net.setString(1, globalName);
}
public static class Networks {
/**
* Net name > Net Id
*/
private final Map<String, Integer> networks = new HashMap<>();
private final Map<Integer, String> nameById = new HashMap<>();
/**
* @param name current name
* @return new name for local network
*/
public String registerNetworkIfPcbSpecific(String name) {
if (isLocalNetwork(name)) {
String newName = "F-0000" + networks.size();
log("Board-specific net: " + name + " would be " + newName);
registerNet(newName);
int newId = networks.get(newName);
log(newName + " is " + newId);
return newName;
} else {
if (networks.containsKey(name)) {
log("Existing global net: " + name);
return name;
}
log("New global net: " + name);
registerNet(name);
return name;
}
}
private static boolean isLocalNetwork(String name) {
return name.startsWith("N-00");
}
private void registerNet(String name) {
networks.put(name, networks.size());
nameById.put(networks.get(name), name);
}
public int getId(String localName) {
Integer value = networks.get(localName);
if (value == null)
throw new NullPointerException("No id for " + localName);
return value;
}
}
public static void log(String s) {
System.out.println(s);
}

View File

@ -10,14 +10,14 @@ public class NetworksTest {
@Test(expected = NullPointerException.class)
public void testNonExistent() {
PcbMergeTool.Networks n = new PcbMergeTool.Networks();
Networks n = new Networks();
n.getId(GND);
}
@Test
public void testRegister() {
PcbMergeTool.Networks n = new PcbMergeTool.Networks();
Networks n = new Networks();
n.registerNetworkIfPcbSpecific(GND);
assertEquals(0, n.getId(GND));
@ -28,7 +28,7 @@ public class NetworksTest {
@Test
public void testLocalNetwork() {
PcbMergeTool.Networks n = new PcbMergeTool.Networks();
Networks n = new Networks();
n.registerNetworkIfPcbSpecific(GND);
String newName = n.registerNetworkIfPcbSpecific("N-00239");

View File

@ -21,7 +21,7 @@ public class PcbMergeTest {
PcbNode pcb = PcbNode.readFromFile("pcb/adc_amp_divider.kicad_pcb");
assertEquals(1036, pcb.children.size());
PcbMergeTool.mergePcb(destNode, pcb);
PcbMergeTool.mergePcb(destNode, pcb, new Networks());
assertEquals(1541, destNode.children.size());
}
@ -89,7 +89,7 @@ public class PcbMergeTest {
PcbNode node2 = PcbNode.parse(pcb2);
assertEquals(17, node2.iterate(TOKEN_NET).size());
PcbMergeTool.mergePcb(node, node2);
PcbMergeTool.mergePcb(node, node2, new Networks());
List<PcbNode> pads = node.iterate(TOKEN_PAD);
assertEquals(2, pads.size());
@ -113,7 +113,7 @@ public class PcbMergeTest {
PcbNode pcb = PcbNode.readFromFile("pcb/adc_amp_divider.kicad_pcb");
assertEquals(1036, pcb.children.size());
PcbMergeTool.mergePcb(destNode, pcb);
PcbMergeTool.mergePcb(destNode, pcb, new Networks());
assertEquals(5758, destNode.children.size());
}