From 8faf73a84b51d94ee4d8cc49dbbf9ff82898f436 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 17 May 2024 18:40:14 +0200 Subject: refactor(language): merge Assertion and AssertionAction --- subprojects/language-model/problem.aird | 456 +++++++++++++-------- .../src/main/resources/model/problem.ecore | 18 +- .../src/main/resources/model/problem.genmodel | 18 +- .../language/semantics/ProblemTraceImpl.java | 2 +- .../web/semantics/metadata/MetadataCreator.java | 2 +- .../language/formatting2/ProblemFormatter.java | 2 +- ...ferShortAssertionsProblemSemanticSequencer.java | 12 +- .../refinery/language/typesystem/TypedModule.java | 25 +- .../language/validation/ProblemValidator.java | 6 +- 9 files changed, 334 insertions(+), 207 deletions(-) (limited to 'subprojects') diff --git a/subprojects/language-model/problem.aird b/subprojects/language-model/problem.aird index 61ccd75d..8682236b 100644 --- a/subprojects/language-model/problem.aird +++ b/subprojects/language-model/problem.aird @@ -7,7 +7,7 @@ build/resources/main/model/problem.genmodel - + @@ -15,11 +15,11 @@ - + - + @@ -2140,9 +2140,9 @@ KEEP_LOCATION KEEP_SIZE KEEP_RATIO - + italic - + @@ -5201,20 +5201,16 @@ - + - - - - - + @@ -5223,7 +5219,7 @@ - + @@ -5241,7 +5237,7 @@ - + @@ -5250,7 +5246,7 @@ - + @@ -5259,7 +5255,7 @@ - + @@ -5268,7 +5264,7 @@ - + @@ -5277,7 +5273,20 @@ - + + + + + + + + + + + + + + @@ -5296,22 +5305,6 @@ - - - - - - - - - - - - - - - - @@ -5362,17 +5355,17 @@ - + - + - + - + @@ -5406,6 +5399,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5434,24 +5460,17 @@ - - - + + + KEEP_LOCATION KEEP_SIZE KEEP_RATIO - - + + italic + - - - - - - - - @@ -5466,8 +5485,8 @@ - - + + labelSize @@ -5478,7 +5497,7 @@ - + @@ -5575,8 +5594,8 @@ - - + + @@ -5589,8 +5608,8 @@ - - + + labelSize @@ -5637,6 +5656,37 @@ + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + + + + + + + + + + + + + + + + + + + italic + + + + + @@ -5654,7 +5704,7 @@ - + @@ -5663,7 +5713,7 @@ - + @@ -5681,6 +5731,14 @@ + + + + + + + + @@ -5712,7 +5770,7 @@ - + @@ -5721,7 +5779,7 @@ - + @@ -5730,7 +5788,7 @@ - + @@ -5739,6 +5797,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -5756,80 +5835,80 @@ - - - + + + - - + + - - + + - - - - - + + + + + - - - + + + - - + + - - + + - - - - - + + + + + - - - + + + - - + + - - + + - - - - - + + + + + - - - + + + - - + + - - + + - - - - - + + + + + - + - + - + @@ -5841,13 +5920,13 @@ KEEP_LOCATION KEEP_SIZE KEEP_RATIO - + italic - + - + KEEP_LOCATION @@ -5861,12 +5940,12 @@ - - - + + + italic - + @@ -5883,7 +5962,7 @@ - + @@ -5902,6 +5981,22 @@ + + + + + + + + + + + + + + + + @@ -5947,9 +6042,10 @@ - + + KEEP_LOCATION KEEP_SIZE KEEP_RATIO @@ -5959,30 +6055,10 @@ - - - - - - - italic - - - - - - - - - - - - - - - + + KEEP_LOCATION KEEP_SIZE KEEP_RATIO @@ -5992,19 +6068,10 @@ - - - - - - - - - - - + + KEEP_LOCATION KEEP_SIZE KEEP_RATIO @@ -6014,15 +6081,82 @@ - - - - - - + + + + KEEP_LOCATION + KEEP_SIZE + KEEP_RATIO + + italic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + italic + + + + + diff --git a/subprojects/language-model/src/main/resources/model/problem.ecore b/subprojects/language-model/src/main/resources/model/problem.ecore index e6af9fab..ed56d3b1 100644 --- a/subprojects/language-model/src/main/resources/model/problem.ecore +++ b/subprojects/language-model/src/main/resources/model/problem.ecore @@ -55,11 +55,9 @@ - + - @@ -137,14 +135,8 @@ - - - - - - + + @@ -282,4 +274,8 @@ + + + diff --git a/subprojects/language-model/src/main/resources/model/problem.genmodel b/subprojects/language-model/src/main/resources/model/problem.genmodel index 7fc9f760..c7044885 100644 --- a/subprojects/language-model/src/main/resources/model/problem.genmodel +++ b/subprojects/language-model/src/main/resources/model/problem.genmodel @@ -121,11 +121,10 @@ - - - - - + + + + @@ -181,11 +180,7 @@ - - - - - + @@ -251,5 +246,8 @@ + + + diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java index aef0fd89..3a979bf0 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ProblemTraceImpl.java @@ -152,7 +152,7 @@ class ProblemTraceImpl implements ProblemTrace { @Override public PartialRelation getPartialRelation(QualifiedName qualifiedName) { - var relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION); + var relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION); return getPartialRelation(getElement(relationScope, qualifiedName, Relation.class)); } diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java index 91008919..29f8ab8b 100644 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java +++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java @@ -51,7 +51,7 @@ public class MetadataCreator { this.problemTrace = problemTrace; var problem = problemTrace.getProblem(); nodeScope = scopeProvider.getScope(problem, ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE); - relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION); + relationScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION); } public List getNodesMetadata(Model model, Concreteness concreteness) { diff --git a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java index d6ece1ea..c6fca89a 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java +++ b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java @@ -35,7 +35,7 @@ public class ProblemFormatter extends AbstractJavaFormatter { surroundNewLines(doc, assertion, this::singleNewLine); var region = regionFor(assertion); doc.append(region.feature(ProblemPackage.Literals.ASSERTION__DEFAULT), this::oneSpace); - doc.append(region.feature(ProblemPackage.Literals.ASSERTION__RELATION), this::noSpace); + doc.append(region.feature(ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION), this::noSpace); formatParenthesizedList(region, doc); for (var argument : assertion.getArguments()) { doc.format(argument); diff --git a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java index 3432b2d8..225bf49d 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java +++ b/subprojects/language/src/main/java/tools/refinery/language/serializer/PreferShortAssertionsProblemSemanticSequencer.java @@ -12,9 +12,11 @@ import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransi import tools.refinery.language.model.problem.Assertion; import tools.refinery.language.model.problem.LogicConstant; import tools.refinery.language.model.problem.LogicValue; -import tools.refinery.language.model.problem.ProblemPackage; import tools.refinery.language.services.ProblemGrammarAccess; +import static tools.refinery.language.model.problem.ProblemPackage.Literals.ABSTRACT_ASSERTION__ARGUMENTS; +import static tools.refinery.language.model.problem.ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION; + public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemanticSequencer { @Inject private ProblemGrammarAccess grammarAccess; @@ -27,13 +29,13 @@ public class PreferShortAssertionsProblemSemanticSequencer extends ProblemSemant return; } if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, ProblemPackage.Literals.ASSERTION__RELATION) == ValueTransient.YES) { + if (transientValues.isValueTransient(semanticObject, ABSTRACT_ASSERTION__RELATION) == ValueTransient.YES) { errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, - ProblemPackage.Literals.ASSERTION__RELATION)); + ABSTRACT_ASSERTION__RELATION)); } - if (transientValues.isListTransient(semanticObject, ProblemPackage.Literals.ASSERTION__ARGUMENTS) == ListTransient.YES) { + if (transientValues.isListTransient(semanticObject, ABSTRACT_ASSERTION__ARGUMENTS) == ListTransient.YES) { errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, - ProblemPackage.Literals.ASSERTION__ARGUMENTS)); + ABSTRACT_ASSERTION__ARGUMENTS)); } } var feeder = createSequencerFeeder(context, semanticObject); diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java index 0b252c09..63815506 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java @@ -8,7 +8,6 @@ package tools.refinery.language.typesystem; import com.google.inject.Inject; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.xtext.validation.CheckType; import org.eclipse.xtext.validation.FeatureBasedDiagnostic; @@ -97,17 +96,17 @@ public class TypedModule { } private void checkTypes(Assertion assertion) { - var relation = assertion.getRelation(); - var value = assertion.getValue(); - checkAssertion(assertion, relation, value, ProblemPackage.Literals.ASSERTION__RELATION); - checkNodeAssertionArgumentTypes(assertion.getArguments(), false); + checkAssertionValueType(assertion); + checkNodeAssertionArgumentTypes(assertion, false); } - private void checkAssertion(EObject assertion, Relation relation, Expr value, EReference relationReference) { + private void checkAssertionValueType(AbstractAssertion assertion) { + var relation = assertion.getRelation(); if (relation == null) { return; } var type = signatureProvider.getSignature(relation).resultType(); + var value = assertion.getValue(); if (type == ExprType.LITERAL) { if (value == null) { return; @@ -117,14 +116,14 @@ public class TypedModule { } if (value == null) { var message = "Assertion value of type %s is required.".formatted(type); - error(message, assertion, relationReference, 0, ProblemValidator.TYPE_ERROR); + error(message, assertion, ProblemPackage.Literals.ABSTRACT_ASSERTION__VALUE, 0, + ProblemValidator.TYPE_ERROR); } expectType(value, type); } - private void checkNodeAssertionArgumentTypes(Collection assertionArguments, - boolean allowVariables) { - for (var argument : assertionArguments) { + private void checkNodeAssertionArgumentTypes(AbstractAssertion assertion, boolean allowVariables) { + for (var argument : assertion.getArguments()) { if (argument instanceof NodeAssertionArgument nodeAssertionArgument) { checkNodeAssertionArgumentType(nodeAssertionArgument, allowVariables); } @@ -150,10 +149,8 @@ public class TypedModule { } private void checkTypes(AssertionAction assertionAction) { - var relation = assertionAction.getRelation(); - var value = assertionAction.getValue(); - checkAssertion(assertionAction, relation, value, ProblemPackage.Literals.ASSERTION_ACTION__RELATION); - checkNodeAssertionArgumentTypes(assertionAction.getArguments(), true); + checkAssertionValueType(assertionAction); + checkNodeAssertionArgumentTypes(assertionAction, true); } public List getDiagnostics() { diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java index 7046d4c6..0285c0c8 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java +++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java @@ -382,16 +382,16 @@ public class ProblemValidator extends AbstractProblemValidator { } @Check - public void checkAssertion(Assertion assertion) { + public void checkAssertion(AbstractAssertion assertion) { var relation = assertion.getRelation(); if (relation instanceof DatatypeDeclaration) { var message = "Assertions for data types are not supported."; - acceptError(message, assertion, ProblemPackage.Literals.ASSERTION__RELATION, 0, + acceptError(message, assertion, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION, 0, UNSUPPORTED_ASSERTION_ISSUE); return; } int argumentCount = assertion.getArguments().size(); - checkArity(assertion, ProblemPackage.Literals.ASSERTION__RELATION, argumentCount); + checkArity(assertion, ProblemPackage.Literals.ABSTRACT_ASSERTION__RELATION, argumentCount); } @Check -- cgit v1.2.3-54-g00ecf