aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-web
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-06-28 18:58:50 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-06-28 18:58:50 +0200
commit2e8a2f6a80fbd974ad877aeee4ef76b740831311 (patch)
tree21aa932352a94ca0a811e60e474ab8e57cc84d4d /subprojects/language-web
parentrefactor(reasoning): fix Sonar warnings (diff)
downloadrefinery-2e8a2f6a80fbd974ad877aeee4ef76b740831311.tar.gz
refinery-2e8a2f6a80fbd974ad877aeee4ef76b740831311.tar.zst
refinery-2e8a2f6a80fbd974ad877aeee4ef76b740831311.zip
refactor: show semantics even if propagation fails
Diffstat (limited to 'subprojects/language-web')
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsInternalErrorResult.java9
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsIssuesResult.java13
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsModelResult.java (renamed from subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsSuccessResult.java)5
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsResult.java22
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java15
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java13
6 files changed, 39 insertions, 38 deletions
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsInternalErrorResult.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsInternalErrorResult.java
deleted file mode 100644
index ff592e93..00000000
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsInternalErrorResult.java
+++ /dev/null
@@ -1,9 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.language.web.semantics;
7
8public record SemanticsInternalErrorResult(String error) implements SemanticsResult {
9}
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsIssuesResult.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsIssuesResult.java
deleted file mode 100644
index 644bd179..00000000
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsIssuesResult.java
+++ /dev/null
@@ -1,13 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.language.web.semantics;
7
8import org.eclipse.xtext.web.server.validation.ValidationResult;
9
10import java.util.List;
11
12public record SemanticsIssuesResult(List<ValidationResult.Issue> issues) implements SemanticsResult {
13}
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsSuccessResult.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsModelResult.java
index f26fa2b2..b0ec58c3 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsSuccessResult.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsModelResult.java
@@ -11,6 +11,7 @@ import tools.refinery.language.web.semantics.metadata.RelationMetadata;
11 11
12import java.util.List; 12import java.util.List;
13 13
14public record SemanticsSuccessResult(List<NodeMetadata> nodes, List<RelationMetadata> relations, 14public record SemanticsModelResult(List<NodeMetadata> nodes, List<RelationMetadata> relations,
15 JsonObject partialInterpretation) implements SemanticsResult { 15 JsonObject partialInterpretation) {
16 public static SemanticsModelResult EMPTY = new SemanticsModelResult(List.of(), List.of(), new JsonObject());
16} 17}
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsResult.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsResult.java
index a2e19a2f..16f25309 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsResult.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsResult.java
@@ -6,7 +6,25 @@
6package tools.refinery.language.web.semantics; 6package tools.refinery.language.web.semantics;
7 7
8import org.eclipse.xtext.web.server.IServiceResult; 8import org.eclipse.xtext.web.server.IServiceResult;
9import org.eclipse.xtext.web.server.validation.ValidationResult;
9 10
10public sealed interface SemanticsResult extends IServiceResult permits SemanticsSuccessResult, 11import java.util.List;
11 SemanticsInternalErrorResult, SemanticsIssuesResult { 12
13public record SemanticsResult(SemanticsModelResult model, String error,
14 List<ValidationResult.Issue> issues) implements IServiceResult {
15 public SemanticsResult(SemanticsModelResult model) {
16 this(model, null, List.of());
17 }
18
19 public SemanticsResult(String error) {
20 this(null, error, List.of());
21 }
22
23 public SemanticsResult(SemanticsModelResult model, String error) {
24 this(model, error, List.of());
25 }
26
27 public SemanticsResult(List<ValidationResult.Issue> issues) {
28 this(null, null, issues);
29 }
12} 30}
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java
index 331ef84b..f6b723fe 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java
@@ -5,7 +5,6 @@
5 */ 5 */
6package tools.refinery.language.web.semantics; 6package tools.refinery.language.web.semantics;
7 7
8import com.google.gson.JsonObject;
9import com.google.inject.Inject; 8import com.google.inject.Inject;
10import com.google.inject.Provider; 9import com.google.inject.Provider;
11import com.google.inject.Singleton; 10import com.google.inject.Singleton;
@@ -21,9 +20,11 @@ import org.slf4j.LoggerFactory;
21import tools.refinery.language.model.problem.Problem; 20import tools.refinery.language.model.problem.Problem;
22import tools.refinery.language.web.xtext.server.push.PushWebDocument; 21import tools.refinery.language.web.xtext.server.push.PushWebDocument;
23 22
24import java.util.List;
25import java.util.Optional; 23import java.util.Optional;
26import java.util.concurrent.*; 24import java.util.concurrent.ExecutionException;
25import java.util.concurrent.ExecutorService;
26import java.util.concurrent.TimeUnit;
27import java.util.concurrent.TimeoutException;
27import java.util.concurrent.atomic.AtomicBoolean; 28import java.util.concurrent.atomic.AtomicBoolean;
28 29
29@Singleton 30@Singleton
@@ -74,7 +75,7 @@ public class SemanticsService extends AbstractCachedService<SemanticsResult> {
74 } 75 }
75 var problem = getProblem(doc); 76 var problem = getProblem(doc);
76 if (problem == null) { 77 if (problem == null) {
77 return new SemanticsSuccessResult(List.of(), List.of(), new JsonObject()); 78 return new SemanticsResult(SemanticsModelResult.EMPTY);
78 } 79 }
79 var worker = workerProvider.get(); 80 var worker = workerProvider.get();
80 worker.setProblem(problem, cancelIndicator); 81 worker.setProblem(problem, cancelIndicator);
@@ -101,14 +102,14 @@ public class SemanticsService extends AbstractCachedService<SemanticsResult> {
101 if (message == null) { 102 if (message == null) {
102 message = "Partial interpretation error"; 103 message = "Partial interpretation error";
103 } 104 }
104 return new SemanticsInternalErrorResult(message); 105 return new SemanticsResult(message);
105 } catch (TimeoutException e) { 106 } catch (TimeoutException e) {
106 future.cancel(true); 107 future.cancel(true);
107 if (!warmedUpCurrently) { 108 if (!warmedUpCurrently) {
108 warmedUp.set(true); 109 warmedUp.set(true);
109 } 110 }
110 LOG.trace("Semantics service timeout", e); 111 LOG.trace("Semantics service timeout", e);
111 return new SemanticsInternalErrorResult("Partial interpretation timed out"); 112 return new SemanticsResult("Partial interpretation timed out");
112 } 113 }
113 if (LOG.isTraceEnabled()) { 114 if (LOG.isTraceEnabled()) {
114 long end = System.currentTimeMillis(); 115 long end = System.currentTimeMillis();
@@ -133,7 +134,7 @@ public class SemanticsService extends AbstractCachedService<SemanticsResult> {
133 if (contents.isEmpty()) { 134 if (contents.isEmpty()) {
134 return null; 135 return null;
135 } 136 }
136 var model = contents.get(0); 137 var model = contents.getFirst();
137 if (!(model instanceof Problem problem)) { 138 if (!(model instanceof Problem problem)) {
138 return null; 139 return null;
139 } 140 }
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
index fed3c8a3..32791960 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsWorker.java
@@ -21,6 +21,7 @@ import tools.refinery.language.model.problem.Problem;
21import tools.refinery.language.web.semantics.metadata.MetadataCreator; 21import tools.refinery.language.web.semantics.metadata.MetadataCreator;
22import tools.refinery.language.semantics.TracedException; 22import tools.refinery.language.semantics.TracedException;
23import tools.refinery.store.reasoning.literal.Concreteness; 23import tools.refinery.store.reasoning.literal.Concreteness;
24import tools.refinery.store.reasoning.seed.PropagatedModel;
24import tools.refinery.store.reasoning.translator.TranslationException; 25import tools.refinery.store.reasoning.translator.TranslationException;
25import tools.refinery.store.util.CancellationToken; 26import tools.refinery.store.util.CancellationToken;
26 27
@@ -63,9 +64,9 @@ class SemanticsWorker implements Callable<SemanticsResult> {
63 cancellationToken.checkCancelled(); 64 cancellationToken.checkCancelled();
64 ModelSemantics semantics; 65 ModelSemantics semantics;
65 try { 66 try {
66 semantics = semanticsFactory.cancellationToken(cancellationToken).createSemantics(problem); 67 semantics = semanticsFactory.cancellationToken(cancellationToken).tryCreateSemantics(problem);
67 } catch (TranslationException e) { 68 } catch (TranslationException e) {
68 return new SemanticsInternalErrorResult(e.getMessage()); 69 return new SemanticsResult(e.getMessage());
69 } catch (TracedException e) { 70 } catch (TracedException e) {
70 var cause = e.getCause(); 71 var cause = e.getCause();
71 // Suppress the type of the cause exception. 72 // Suppress the type of the cause exception.
@@ -79,12 +80,14 @@ class SemanticsWorker implements Callable<SemanticsResult> {
79 var relationsMetadata = metadataCreator.getRelationsMetadata(); 80 var relationsMetadata = metadataCreator.getRelationsMetadata();
80 cancellationToken.checkCancelled(); 81 cancellationToken.checkCancelled();
81 var partialInterpretation = partialInterpretation2Json.getPartialInterpretation(semantics, cancellationToken); 82 var partialInterpretation = partialInterpretation2Json.getPartialInterpretation(semantics, cancellationToken);
82 return new SemanticsSuccessResult(nodesMetadata, relationsMetadata, partialInterpretation); 83 var modelResult = new SemanticsModelResult(nodesMetadata, relationsMetadata, partialInterpretation);
84 var error = semantics.isRejected() ? PropagatedModel.PROPAGATION_FAILED_MESSAGE : null;
85 return new SemanticsResult(modelResult, error);
83 } 86 }
84 87
85 private SemanticsResult getTracedErrorResult(EObject sourceElement, String message) { 88 private SemanticsResult getTracedErrorResult(EObject sourceElement, String message) {
86 if (sourceElement == null || !problem.eResource().equals(sourceElement.eResource())) { 89 if (sourceElement == null || !problem.eResource().equals(sourceElement.eResource())) {
87 return new SemanticsInternalErrorResult(message); 90 return new SemanticsResult(message);
88 } 91 }
89 var diagnostic = new FeatureBasedDiagnostic(Diagnostic.ERROR, message, sourceElement, null, 0, 92 var diagnostic = new FeatureBasedDiagnostic(Diagnostic.ERROR, message, sourceElement, null, 0,
90 CheckType.EXPENSIVE, DIAGNOSTIC_ID); 93 CheckType.EXPENSIVE, DIAGNOSTIC_ID);
@@ -94,6 +97,6 @@ class SemanticsWorker implements Callable<SemanticsResult> {
94 .map(issue -> new ValidationResult.Issue(issue.getMessage(), "error", issue.getLineNumber(), 97 .map(issue -> new ValidationResult.Issue(issue.getMessage(), "error", issue.getLineNumber(),
95 issue.getColumn(), issue.getOffset(), issue.getLength())) 98 issue.getColumn(), issue.getOffset(), issue.getLength()))
96 .toList(); 99 .toList();
97 return new SemanticsIssuesResult(issues); 100 return new SemanticsResult(issues);
98 } 101 }
99} 102}