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 --- .../language/formatting2/ProblemFormatter.java | 2 +- ...ferShortAssertionsProblemSemanticSequencer.java | 12 ++++++----- .../refinery/language/typesystem/TypedModule.java | 25 ++++++++++------------ .../language/validation/ProblemValidator.java | 6 +++--- 4 files changed, 22 insertions(+), 23 deletions(-) (limited to 'subprojects/language') 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