diff --git a/src/main/java/edu/kit/formal/gui/controller/DebuggerMainWindowController.java b/src/main/java/edu/kit/formal/gui/controller/DebuggerMainWindowController.java index 0aed81137fe2492843752a739cc1baf00e207159..94a3a039bd2770e0a646e89ade7b71dd73272d73 100644 --- a/src/main/java/edu/kit/formal/gui/controller/DebuggerMainWindowController.java +++ b/src/main/java/edu/kit/formal/gui/controller/DebuggerMainWindowController.java @@ -4,8 +4,12 @@ import de.uka.ilkd.key.proof.init.ProofInputException; import de.uka.ilkd.key.speclang.Contract; import edu.kit.formal.gui.controls.*; import edu.kit.formal.gui.model.RootModel; -import edu.kit.formal.interpreter.*; +import edu.kit.formal.interpreter.Interpreter; +import edu.kit.formal.interpreter.InterpreterBuilder; +import edu.kit.formal.interpreter.KeYProofFacade; import edu.kit.formal.interpreter.data.KeyData; +import edu.kit.formal.interpreter.graphs.PTreeNode; +import edu.kit.formal.interpreter.graphs.ProofTreeController; import edu.kit.formal.proofscriptparser.Facade; import edu.kit.formal.proofscriptparser.ast.ProofScript; import javafx.beans.property.SimpleBooleanProperty; diff --git a/src/main/java/edu/kit/formal/interpreter/InterpretingService.java b/src/main/java/edu/kit/formal/interpreter/InterpretingService.java index 2cd4f245a95bc5dceba299f7f1c148525bbc1447..41da703d32c06aadadcff5d7d7a6d2aec6e83702 100644 --- a/src/main/java/edu/kit/formal/interpreter/InterpretingService.java +++ b/src/main/java/edu/kit/formal/interpreter/InterpretingService.java @@ -14,7 +14,7 @@ import javafx.concurrent.Task; * * @author A. Weigl */ -class InterpretingService extends Service> { +public class InterpretingService extends Service> { /** * The interpreter (with teh appropriate KeY state) that is used to traverse and execute the script @@ -31,7 +31,7 @@ class InterpretingService extends Service> { */ private PuppetMaster blocker; - InterpretingService(PuppetMaster blocker) { + public InterpretingService(PuppetMaster blocker) { this.blocker = blocker; } diff --git a/src/main/java/edu/kit/formal/interpreter/NodeAddedEvent.java b/src/main/java/edu/kit/formal/interpreter/NodeAddedEvent.java index b1e047464dcdff3c5a6f1af52e09af57ecc7bab7..a3bdc4644f0af5e7b3804759437bbcfb414d5ce5 100644 --- a/src/main/java/edu/kit/formal/interpreter/NodeAddedEvent.java +++ b/src/main/java/edu/kit/formal/interpreter/NodeAddedEvent.java @@ -1,5 +1,6 @@ package edu.kit.formal.interpreter; +import edu.kit.formal.interpreter.graphs.PTreeNode; import lombok.Getter; /** diff --git a/src/main/java/edu/kit/formal/interpreter/exceptions/StateGraphException.java b/src/main/java/edu/kit/formal/interpreter/exceptions/StateGraphException.java new file mode 100644 index 0000000000000000000000000000000000000000..47daed562aeb92d13954e9c0ba352f08f3b27018 --- /dev/null +++ b/src/main/java/edu/kit/formal/interpreter/exceptions/StateGraphException.java @@ -0,0 +1,26 @@ +package edu.kit.formal.interpreter.exceptions; + +/** + * Exception that is thrown if State graph could not be build properly + */ +public class StateGraphException extends RuntimeException { + public StateGraphException() { + super(); + } + + public StateGraphException(String message) { + super(message); + } + + public StateGraphException(String message, Throwable cause) { + super(message, cause); + } + + public StateGraphException(Throwable cause) { + super(cause); + } + + protected StateGraphException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/src/main/java/edu/kit/formal/interpreter/ControlFlowNode.java b/src/main/java/edu/kit/formal/interpreter/graphs/ControlFlowNode.java similarity index 88% rename from src/main/java/edu/kit/formal/interpreter/ControlFlowNode.java rename to src/main/java/edu/kit/formal/interpreter/graphs/ControlFlowNode.java index 529e4f6fd85613859e56d42dc317424ef811496d..7692e153e04fff2968eece81ef81ef223e3505aa 100644 --- a/src/main/java/edu/kit/formal/interpreter/ControlFlowNode.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/ControlFlowNode.java @@ -1,4 +1,4 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; import edu.kit.formal.proofscriptparser.ast.ASTNode; @@ -6,7 +6,7 @@ import java.util.LinkedList; import java.util.List; /** - * ControlFlowNode for ControlFlowGraph to look up step-edges for teh debugger. + * ControlFlowNode for ControlFlowGraph to look up step-edges for the debugger. */ public class ControlFlowNode { @@ -47,7 +47,7 @@ public class ControlFlowNode { StringBuilder sb = new StringBuilder(); sb.append("Node {"); if (scriptstmt != null) { - sb.append(scriptstmt.getNodeName().toString() + "@" + scriptstmt.getStartPosition()); + sb.append(scriptstmt.getNodeName()).append("@").append(scriptstmt.getStartPosition()); } else { sb.append("No Stmt"); } diff --git a/src/main/java/edu/kit/formal/interpreter/EdgeTypes.java b/src/main/java/edu/kit/formal/interpreter/graphs/EdgeTypes.java similarity index 52% rename from src/main/java/edu/kit/formal/interpreter/EdgeTypes.java rename to src/main/java/edu/kit/formal/interpreter/graphs/EdgeTypes.java index af433117f02ed483042f448f9ef3940713a62e44..14f657bac8b5791afda0a5b7ae5d7c31e5e7903c 100644 --- a/src/main/java/edu/kit/formal/interpreter/EdgeTypes.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/EdgeTypes.java @@ -1,7 +1,7 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; /** - * Created by sarah on 6/20/17. + * Edge Types a state graph and control flow graph may have */ public enum EdgeTypes { STEP_INTO, STEP_OVER, STEP_BACK, STEP_RETURN, STEP_OVER_COND, STATE_FLOW; diff --git a/src/main/java/edu/kit/formal/interpreter/GraphChangedListener.java b/src/main/java/edu/kit/formal/interpreter/graphs/GraphChangedListener.java similarity index 63% rename from src/main/java/edu/kit/formal/interpreter/GraphChangedListener.java rename to src/main/java/edu/kit/formal/interpreter/graphs/GraphChangedListener.java index 602a163034aac5cffa24855e36d54240e6c90d18..2eb2cfea2be41e616ed65c80bf2c0d962e0dce1d 100644 --- a/src/main/java/edu/kit/formal/interpreter/GraphChangedListener.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/GraphChangedListener.java @@ -1,4 +1,6 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; + +import edu.kit.formal.interpreter.NodeAddedEvent; /** * Listener for Change events in the state graph diff --git a/src/main/java/edu/kit/formal/interpreter/PTreeNode.java b/src/main/java/edu/kit/formal/interpreter/graphs/PTreeNode.java similarity index 94% rename from src/main/java/edu/kit/formal/interpreter/PTreeNode.java rename to src/main/java/edu/kit/formal/interpreter/graphs/PTreeNode.java index b3c4919a89e7150520c6d981eb0d5031cadcd8bc..ac6e57779b298967b6c5c06825f40efaa63a7c9b 100644 --- a/src/main/java/edu/kit/formal/interpreter/PTreeNode.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/PTreeNode.java @@ -1,4 +1,4 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; import edu.kit.formal.interpreter.data.KeyData; import edu.kit.formal.interpreter.data.State; @@ -7,7 +7,7 @@ import edu.kit.formal.proofscriptparser.ast.ASTNode; import java.util.LinkedList; /** - * Inner class representing nodes in the graph + * Inner class representing nodes in the stategraph graph * A node contains a reference to the ASTNode and a reference to the corresponding interpreter state if this state is already interpreted, null otherwise. */ public class PTreeNode { diff --git a/src/main/java/edu/kit/formal/interpreter/ProgramFlowVisitor.java b/src/main/java/edu/kit/formal/interpreter/graphs/ProgramFlowVisitor.java similarity index 99% rename from src/main/java/edu/kit/formal/interpreter/ProgramFlowVisitor.java rename to src/main/java/edu/kit/formal/interpreter/graphs/ProgramFlowVisitor.java index 1015ae811ed4152ca7a7bab9d406c47e0b3da0ad..12d4cac8204c2f2b98c42c08cb78548a50cb5a2a 100644 --- a/src/main/java/edu/kit/formal/interpreter/ProgramFlowVisitor.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/ProgramFlowVisitor.java @@ -1,4 +1,4 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; import com.google.common.graph.EndpointPair; import com.google.common.graph.MutableValueGraph; diff --git a/src/main/java/edu/kit/formal/interpreter/ProofTreeController.java b/src/main/java/edu/kit/formal/interpreter/graphs/ProofTreeController.java similarity index 97% rename from src/main/java/edu/kit/formal/interpreter/ProofTreeController.java rename to src/main/java/edu/kit/formal/interpreter/graphs/ProofTreeController.java index 59f1f02babc93d60dc19fef6b71458e9976fe558..47b7039fe4e56b2d0d5bb961b52c28f3ef7a35f9 100644 --- a/src/main/java/edu/kit/formal/interpreter/ProofTreeController.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/ProofTreeController.java @@ -1,6 +1,8 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; import edu.kit.formal.gui.controller.PuppetMaster; +import edu.kit.formal.interpreter.Interpreter; +import edu.kit.formal.interpreter.InterpretingService; import edu.kit.formal.interpreter.data.GoalNode; import edu.kit.formal.interpreter.data.KeyData; import edu.kit.formal.interpreter.data.State; @@ -162,8 +164,7 @@ public class ProofTreeController { */ public PTreeNode stepBack() { PTreeNode current = statePointer; - PTreeNode backState = stateGraphVisitor.getStepBack(current); - this.statePointer = backState; + this.statePointer = stateGraphVisitor.getStepBack(current); setNewState(statePointer.getState()); return statePointer; diff --git a/src/main/java/edu/kit/formal/interpreter/StateGraphVisitor.java b/src/main/java/edu/kit/formal/interpreter/graphs/StateGraphVisitor.java similarity index 92% rename from src/main/java/edu/kit/formal/interpreter/StateGraphVisitor.java rename to src/main/java/edu/kit/formal/interpreter/graphs/StateGraphVisitor.java index 76be23f220e02b5da517fd79e0a3a3dbf79a7b2f..5b0791514f960baf6d023163a3abb9bd5e597cf1 100644 --- a/src/main/java/edu/kit/formal/interpreter/StateGraphVisitor.java +++ b/src/main/java/edu/kit/formal/interpreter/graphs/StateGraphVisitor.java @@ -1,10 +1,13 @@ -package edu.kit.formal.interpreter; +package edu.kit.formal.interpreter.graphs; import com.google.common.graph.MutableValueGraph; import com.google.common.graph.ValueGraphBuilder; +import edu.kit.formal.interpreter.Interpreter; +import edu.kit.formal.interpreter.NodeAddedEvent; import edu.kit.formal.interpreter.data.KeyData; import edu.kit.formal.interpreter.data.State; +import edu.kit.formal.interpreter.exceptions.StateGraphException; import edu.kit.formal.proofscriptparser.DefaultASTVisitor; import edu.kit.formal.proofscriptparser.ast.*; import javafx.application.Platform; @@ -19,7 +22,7 @@ import java.util.Set; /** * State graph that is computed on the fly while stepping through script - * A Node in the graph is a PTreeNode {@link edu.kit.formal.interpreter.PTreeNode} + * A Node in the graph is a PTreeNode {@link PTreeNode} * Edges are computed on the fly while */ public class StateGraphVisitor extends DefaultASTVisitor { @@ -85,10 +88,13 @@ public class StateGraphVisitor extends DefaultASTVisitor { public void createRootNode(ASTNode node) { PTreeNode newStateNode = new PTreeNode(node); newStateNode.setState(currentInterpreter.getCurrentState().copy()); - stateGraph.addNode(newStateNode); - this.root.set(newStateNode); - lastNode = newStateNode; - + boolean res = stateGraph.addNode(newStateNode); + if (!res) { + throw new StateGraphException("Could not create new state for ASTNode " + node + " and add it to the stategraph"); + } else { + this.root.set(newStateNode); + lastNode = newStateNode; + } } public void setUpGraph() { @@ -161,8 +167,7 @@ public class StateGraphVisitor extends DefaultASTVisitor { */ public Void createNewNode(ASTNode node) { State lastState = lastNode.getState(); - //maybe delete - //lastNode.setState(currentInterpreter.getCurrentState()); + PTreeNode newStateNode; newStateNode = new PTreeNode(node); @@ -273,7 +278,7 @@ public class StateGraphVisitor extends DefaultASTVisitor { } - protected void fireNodeAdded(NodeAddedEvent nodeAddedEvent) { + private void fireNodeAdded(NodeAddedEvent nodeAddedEvent) { changeListeners.forEach(list -> { Platform.runLater(() -> { list.graphChanged(nodeAddedEvent); diff --git a/src/test/java/edu/kit/formal/interpreter/ProgramFlowVisitorTest.java b/src/test/java/edu/kit/formal/interpreter/ProgramFlowVisitorTest.java index edb13a2310c71aeea780e7d302f296bad9dd655e..ff9c3d5448ce86dd6f06d9be8aa6024a91a30e96 100644 --- a/src/test/java/edu/kit/formal/interpreter/ProgramFlowVisitorTest.java +++ b/src/test/java/edu/kit/formal/interpreter/ProgramFlowVisitorTest.java @@ -1,6 +1,7 @@ package edu.kit.formal.interpreter; import edu.kit.formal.interpreter.funchdl.DefaultLookup; +import edu.kit.formal.interpreter.graphs.ProgramFlowVisitor; import edu.kit.formal.proofscriptparser.Facade; import edu.kit.formal.proofscriptparser.ScriptLanguageParser; import edu.kit.formal.proofscriptparser.TransformAst;