From: Daniel Kirschten Date: Wed, 19 Jun 2019 11:13:49 +0000 (+0200) Subject: Added call checks for subclass methods: X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=29948edc1851d17311c50c7eff34070a0dc36ceb;p=Mograsim.git Added call checks for subclass methods: SubmodelComponents don't allow add / removePin, SimpleRectangularSubmodelComponents don't allow add / removeSubmodelInterface and setSize --- diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/JsonExample.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/JsonExample.java index 793f0f7f..eb3833ba 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/JsonExample.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/JsonExample.java @@ -27,7 +27,7 @@ public class JsonExample { super(model, 1, "Test"); setSubmodelScale(.4); - setInputPins("Test input pin"); + setInputPins("Input pin #0"); GUICustomComponentCreator.create(submodelModifiable, "HalfAdder.json"); } } diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java index 0f6fc1bc..9d040925 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java @@ -79,9 +79,9 @@ public final class GUICustomComponentCreator ((Number) m.get(SimpleRectangularSubmodelComponent.kLogicWidth)).intValue(), (String) m.get(SimpleRectangularSubmodelComponent.kLabel)); rect.setSubmodelScale(params.composition.innerScale); - rect.setSize(params.width, params.height); + // rect.setSize(params.width, params.height); - // TODO names + // TODO save & restore names int inputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue(); String[] inputNames = new String[inputCount]; for (int i = 0; i < inputCount; i++) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java index 558df249..f28723d2 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java @@ -55,17 +55,17 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent int inputCount = pinNames.length; int oldInputCount = inputSupermodelPins.size(); double height = Math.max(inputCount, outputSupermodelPins.size()) * pinDistance; - setSize(width, height); + super.setSize(width, height); if (oldInputCount > inputCount) while (inputSupermodelPins.size() > inputCount) { inputSubmodelPins.remove(inputCount); - removeSubmodelInterface(inputSupermodelPins.remove(inputCount)); + super.removeSubmodelInterface(inputSupermodelPins.remove(inputCount)); } else if (oldInputCount < inputCount) for (int i = oldInputCount; i < inputCount; i++) { - Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, 0, pinDistance / 2 + i * pinDistance); + Pin submodelPin = super.addSubmodelInterface(pinNames[i], logicWidth, 0, pinDistance / 2 + i * pinDistance); inputSubmodelPins.add(submodelPin); inputSupermodelPins.add(getSupermodelPin(submodelPin)); } @@ -73,8 +73,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent { if (!inputSubmodelPins.get(i).name.equals(pinNames[i])) { - removeSubmodelInterface(inputSupermodelPins.get(i)); - Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, 0, pinDistance / 2 + i * pinDistance); + super.removeSubmodelInterface(inputSupermodelPins.get(i)); + Pin submodelPin = super.addSubmodelInterface(pinNames[i], logicWidth, 0, pinDistance / 2 + i * pinDistance); inputSubmodelPins.set(i, submodelPin); inputSupermodelPins.set(i, getSupermodelPin(submodelPin)); } @@ -85,17 +85,17 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent { int outputCount = pinNames.length; int oldOutputCount = outputSupermodelPins.size(); - setSize(width, Math.max(inputSupermodelPins.size(), outputCount) * pinDistance); + super.setSize(width, Math.max(inputSupermodelPins.size(), outputCount) * pinDistance); if (oldOutputCount > outputCount) while (outputSupermodelPins.size() > outputCount) { outputSubmodelPins.remove(outputCount); - removeSubmodelInterface(outputSupermodelPins.get(outputCount)); + super.removeSubmodelInterface(outputSupermodelPins.get(outputCount)); } else if (oldOutputCount < outputCount) for (int i = oldOutputCount; i < outputCount; i++) { - Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, width, pinDistance / 2 + i * pinDistance); + Pin submodelPin = super.addSubmodelInterface(pinNames[i], logicWidth, width, pinDistance / 2 + i * pinDistance); outputSubmodelPins.add(submodelPin); outputSupermodelPins.add(getSupermodelPin(submodelPin)); } @@ -103,8 +103,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent { if (!outputSubmodelPins.get(i).name.equals(pinNames[i])) { - removeSubmodelInterface(outputSupermodelPins.get(i)); - Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, width, pinDistance / 2 + i * pinDistance); + super.removeSubmodelInterface(outputSupermodelPins.get(i)); + Pin submodelPin = super.addSubmodelInterface(pinNames[i], logicWidth, width, pinDistance / 2 + i * pinDistance); outputSubmodelPins.set(i, submodelPin); outputSupermodelPins.set(i, getSupermodelPin(submodelPin)); } @@ -177,4 +177,25 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent ret.specialized = m; return ret; } + + @Override + protected Pin addSubmodelInterface(String name, int logicWidth, double relX, double relY) + { + throw new UnsupportedOperationException( + "Can't add submodel interfaces to a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead"); + } + + @Override + protected void removeSubmodelInterface(Pin supermodelPin) + { + throw new UnsupportedOperationException( + "Can't remove submodel interfaces of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead"); + } + + @Override + protected void setSize(double width, double height) + { + throw new UnsupportedOperationException( + "Can't set the size of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead"); + } } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java index 9fa933bd..cfa505ee 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -82,7 +82,7 @@ public abstract class SubmodelComponent extends GUIComponent submodelInterface.addPin(submodelPin); MovablePin supermodelPin = new MovablePin(this, name, logicWidth, relX, relY); - addPin(supermodelPin); + super.addPin(supermodelPin); submodelPinsPerSupermodelPin.put(supermodelPin, submodelPin); supermodelPinsPerSubmodelPin.put(submodelPin, supermodelPin); @@ -104,7 +104,7 @@ public abstract class SubmodelComponent extends GUIComponent protected void removeSubmodelInterface(Pin supermodelPin) { - removePin(supermodelPin); + super.removePin(supermodelPin); Pin submodelPin = getSubmodelMovablePin(supermodelPin); submodelInterface.removePin(submodelPin); @@ -269,4 +269,16 @@ public abstract class SubmodelComponent extends GUIComponent params.innerWires = wires; return params; } + + @Override + protected void addPin(Pin pin) + { + throw new UnsupportedOperationException("Can't add pins to a SubmodelComponent directly, call addSubmodelInterface instead"); + } + + @Override + protected void removePin(Pin pin) + { + throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead"); + } } \ No newline at end of file