From 383137c190cab040d2609f8295ef822c3917b88d Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sat, 19 Nov 2022 14:00:12 +0100 Subject: feat(language): numeric expressions --- .../refinery/language/ide/ProblemIdeModule.java | 14 ++++++++++++- ...InjectingPartialProblemContentAssistParser.java | 23 ++++++++++++++++++++++ .../TokenSourceInjectingProblemParser.java | 23 ++++++++++++++++++++++ .../contentassist/antlr/ProblemTokenSource.java | 19 ++++++++++++++++++ .../ProblemSemanticHighlightingCalculator.java | 20 ++++++------------- 5 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingPartialProblemContentAssistParser.java create mode 100644 subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingProblemParser.java create mode 100644 subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/antlr/ProblemTokenSource.java (limited to 'subprojects/language-ide/src/main') diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java index 51cecf06..fb620065 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java @@ -5,16 +5,28 @@ package tools.refinery.language.ide; import org.eclipse.xtext.ide.editor.contentassist.IPrefixMatcher; import org.eclipse.xtext.ide.editor.contentassist.IdeCrossrefProposalProvider; +import org.eclipse.xtext.ide.editor.contentassist.antlr.IContentAssistParser; +import org.eclipse.xtext.ide.editor.partialEditing.IPartialEditingContentAssistParser; import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator; - import tools.refinery.language.ide.contentassist.FuzzyMatcher; import tools.refinery.language.ide.contentassist.ProblemCrossrefProposalProvider; +import tools.refinery.language.ide.contentassist.TokenSourceInjectingPartialProblemContentAssistParser; +import tools.refinery.language.ide.contentassist.TokenSourceInjectingProblemParser; import tools.refinery.language.ide.syntaxcoloring.ProblemSemanticHighlightingCalculator; /** * Use this class to register ide components. */ public class ProblemIdeModule extends AbstractProblemIdeModule { + @Override + public Class bindIContentAssistParser() { + return TokenSourceInjectingProblemParser.class; + } + + public Class bindIPartialEditingContentAssistParser() { + return TokenSourceInjectingPartialProblemContentAssistParser.class; + } + public Class bindISemanticHighlightingCalculator() { return ProblemSemanticHighlightingCalculator.class; } diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingPartialProblemContentAssistParser.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingPartialProblemContentAssistParser.java new file mode 100644 index 00000000..3ece6f67 --- /dev/null +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingPartialProblemContentAssistParser.java @@ -0,0 +1,23 @@ +package tools.refinery.language.ide.contentassist; + +import com.google.inject.Inject; +import com.google.inject.Injector; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.TokenSource; +import tools.refinery.language.ide.contentassist.antlr.PartialProblemContentAssistParser; + +/** + * Code is duplicated from {@link tools.refinery.language.parser.antlr.TokenSourceInjectingProblemParser} due to + * Xtext code generation. + */ +public class TokenSourceInjectingPartialProblemContentAssistParser extends PartialProblemContentAssistParser { + @Inject + private Injector injector; + + @Override + protected TokenSource createLexer(CharStream stream) { + var tokenSource = super.createLexer(stream); + injector.injectMembers(tokenSource); + return tokenSource; + } +} diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingProblemParser.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingProblemParser.java new file mode 100644 index 00000000..80dfee5c --- /dev/null +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/TokenSourceInjectingProblemParser.java @@ -0,0 +1,23 @@ +package tools.refinery.language.ide.contentassist; + +import com.google.inject.Inject; +import com.google.inject.Injector; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.TokenSource; +import tools.refinery.language.ide.contentassist.antlr.ProblemParser; + +/** + * Code is duplicated from {@link tools.refinery.language.parser.antlr.TokenSourceInjectingProblemParser} due to + * Xtext code generation. + */ +public class TokenSourceInjectingProblemParser extends ProblemParser { + @Inject + private Injector injector; + + @Override + protected TokenSource createLexer(CharStream stream) { + var tokenSource = super.createLexer(stream); + injector.injectMembers(tokenSource); + return tokenSource; + } +} diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/antlr/ProblemTokenSource.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/antlr/ProblemTokenSource.java new file mode 100644 index 00000000..c6c7f41f --- /dev/null +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/antlr/ProblemTokenSource.java @@ -0,0 +1,19 @@ +/* + * generated by Xtext 2.29.0.M2 + */ +package tools.refinery.language.ide.contentassist.antlr; + +import org.antlr.runtime.TokenSource; + +/** + * Duplicates the logic from {@link tools.refinery.language.parser.antlr.ProblemTokenSource} to satisfy the Xtext + * generator. + *

+ * Naming this class ProblemTokenSource is required by Xtext, so we have to silence the naming warning. + */ +@SuppressWarnings("squid:S2176") +public class ProblemTokenSource extends tools.refinery.language.parser.antlr.ProblemTokenSource { + public ProblemTokenSource(TokenSource delegate) { + super(delegate); + } +} diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java index 6a05005d..7703e4e3 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java @@ -1,7 +1,7 @@ package tools.refinery.language.ide.syntaxcoloring; -import java.util.List; - +import com.google.common.collect.ImmutableList; +import com.google.inject.Inject; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; @@ -11,20 +11,12 @@ import org.eclipse.xtext.nodemodel.INode; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.service.OperationCanceledManager; import org.eclipse.xtext.util.CancelIndicator; - -import com.google.common.collect.ImmutableList; -import com.google.inject.Inject; - -import tools.refinery.language.model.problem.ClassDeclaration; -import tools.refinery.language.model.problem.NamedElement; -import tools.refinery.language.model.problem.Node; -import tools.refinery.language.model.problem.PredicateDefinition; -import tools.refinery.language.model.problem.PredicateKind; -import tools.refinery.language.model.problem.ProblemPackage; -import tools.refinery.language.model.problem.ReferenceDeclaration; +import tools.refinery.language.model.problem.*; import tools.refinery.language.utils.ProblemDesugarer; import tools.refinery.language.utils.ProblemUtil; +import java.util.List; + public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator { private static final String BUILTIN_CLASS = "builtin"; private static final String ABSTRACT_CLASS = "abstract"; @@ -113,7 +105,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli classesBuilder.add(ERROR_CLASS); } if (eObject instanceof Node node) { - if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_ARGUMENT__VARIABLE_OR_NODE) { + if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { classesBuilder.add(NODE_CLASS); } if (ProblemUtil.isIndividualNode(node)) { -- cgit v1.2.3-70-g09d2