aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java')
-rw-r--r--subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java18
1 files changed, 14 insertions, 4 deletions
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java
index 537d94ca..1bd419d8 100644
--- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java
+++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java
@@ -68,7 +68,9 @@ public class SolutionSerializer {
68 private Model model; 68 private Model model;
69 private ReasoningAdapter reasoningAdapter; 69 private ReasoningAdapter reasoningAdapter;
70 private PartialInterpretation<TruthValue, Boolean> existsInterpretation; 70 private PartialInterpretation<TruthValue, Boolean> existsInterpretation;
71 private Problem originalProblem;
71 private Problem problem; 72 private Problem problem;
73 private NodeDeclaration nodeDeclaration;
72 private final MutableIntObjectMap<Node> nodes = IntObjectMaps.mutable.empty(); 74 private final MutableIntObjectMap<Node> nodes = IntObjectMaps.mutable.empty();
73 75
74 @Inject 76 @Inject
@@ -87,14 +89,22 @@ public class SolutionSerializer {
87 reasoningAdapter = model.getAdapter(ReasoningAdapter.class); 89 reasoningAdapter = model.getAdapter(ReasoningAdapter.class);
88 existsInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE, 90 existsInterpretation = reasoningAdapter.getPartialInterpretation(Concreteness.CANDIDATE,
89 ReasoningAdapter.EXISTS_SYMBOL); 91 ReasoningAdapter.EXISTS_SYMBOL);
90 var originalProblem = trace.getProblem(); 92 originalProblem = trace.getProblem();
91 problem = copyProblem(originalProblem, uri); 93 problem = copyProblem(originalProblem, uri);
94 problem.setKind(ModuleKind.MODULE);
92 problem.getStatements().removeIf(SolutionSerializer::shouldRemoveStatement); 95 problem.getStatements().removeIf(SolutionSerializer::shouldRemoveStatement);
93 problem.getNodes().removeIf(this::shouldRemoveNode); 96 problem.getNodes().removeIf(this::shouldRemoveNode);
97 nodeDeclaration = ProblemFactory.eINSTANCE.createNodeDeclaration();
98 nodeDeclaration.setKind(NodeKind.NODE);
99 nodeDeclaration.getNodes().addAll(problem.getNodes());
100 problem.getStatements().add(nodeDeclaration);
94 nameProvider.setProblem(problem); 101 nameProvider.setProblem(problem);
95 addExistsAssertions(); 102 addExistsAssertions();
96 addClassAssertions(); 103 addClassAssertions();
97 addReferenceAssertions(); 104 addReferenceAssertions();
105 if (nodeDeclaration.getNodes().isEmpty()) {
106 problem.getStatements().remove(nodeDeclaration);
107 }
98 return problem; 108 return problem;
99 } 109 }
100 110
@@ -104,8 +114,8 @@ public class SolutionSerializer {
104 114
105 private boolean shouldRemoveNode(Node newNode) { 115 private boolean shouldRemoveNode(Node newNode) {
106 var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(newNode); 116 var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(newNode);
107 var scope = scopeProvider.getScope(trace.getProblem(), ProblemPackage.Literals.ASSERTION__RELATION); 117 var scope = scopeProvider.getScope(originalProblem, ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE);
108 var originalNode = semanticsUtils.maybeGetElement(problem, scope, qualifiedName, Node.class); 118 var originalNode = semanticsUtils.maybeGetElement(originalProblem, scope, qualifiedName, Node.class);
109 if (originalNode == null) { 119 if (originalNode == null) {
110 return false; 120 return false;
111 } 121 }
@@ -238,7 +248,7 @@ public class SolutionSerializer {
238 var nodeName = nameProvider.getNextName(typeName); 248 var nodeName = nameProvider.getNextName(typeName);
239 node = ProblemFactory.eINSTANCE.createNode(); 249 node = ProblemFactory.eINSTANCE.createNode();
240 node.setName(nodeName); 250 node.setName(nodeName);
241 problem.getNodes().add(node); 251 nodeDeclaration.getNodes().add(node);
242 nodes.put(nodeId, node); 252 nodes.put(nodeId, node);
243 } 253 }
244 addAssertion(candidateRelation, LogicValue.TRUE, node); 254 addAssertion(candidateRelation, LogicValue.TRUE, node);