diff options
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.java | 18 |
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); |