From fc7e9312d00e60171ed77c477ed91231d3dbfff9 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 12 Dec 2021 17:48:47 +0100 Subject: build: move modules into subproject directory --- language-ide/build.gradle | 18 --- .../refinery/language/ide/ProblemIdeModule.java | 30 ----- .../refinery/language/ide/ProblemIdeSetup.java | 24 ---- .../language/ide/contentassist/FuzzyMatcher.java | 44 -------- .../ProblemCrossrefProposalProvider.java | 77 ------------- .../ProblemSemanticHighlightingCalculator.java | 122 --------------------- 6 files changed, 315 deletions(-) delete mode 100644 language-ide/build.gradle delete mode 100644 language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java delete mode 100644 language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeSetup.java delete mode 100644 language-ide/src/main/java/tools/refinery/language/ide/contentassist/FuzzyMatcher.java delete mode 100644 language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java delete mode 100644 language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java (limited to 'language-ide') diff --git a/language-ide/build.gradle b/language-ide/build.gradle deleted file mode 100644 index 3786762b..00000000 --- a/language-ide/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -plugins { - id 'refinery-java-library' - id 'refinery-xtext-conventions' -} - -dependencies { - api project(':refinery-language') - api libs.xtext.ide - api libs.xtext.xbase.ide -} - -def generateXtextLanguage = project(':refinery-language').tasks.named('generateXtextLanguage') - -for (taskName in ['compileJava', 'processResources']) { - tasks.named(taskName) { - dependsOn generateXtextLanguage - } -} diff --git a/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java b/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java deleted file mode 100644 index 51cecf06..00000000 --- a/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeModule.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * generated by Xtext 2.25.0 - */ -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.syntaxcoloring.ISemanticHighlightingCalculator; - -import tools.refinery.language.ide.contentassist.FuzzyMatcher; -import tools.refinery.language.ide.contentassist.ProblemCrossrefProposalProvider; -import tools.refinery.language.ide.syntaxcoloring.ProblemSemanticHighlightingCalculator; - -/** - * Use this class to register ide components. - */ -public class ProblemIdeModule extends AbstractProblemIdeModule { - public Class bindISemanticHighlightingCalculator() { - return ProblemSemanticHighlightingCalculator.class; - } - - @Override - public Class bindIPrefixMatcher() { - return FuzzyMatcher.class; - } - - public Class bindIdeCrossrefProposalProvider() { - return ProblemCrossrefProposalProvider.class; - } -} diff --git a/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeSetup.java b/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeSetup.java deleted file mode 100644 index 5b88d41f..00000000 --- a/language-ide/src/main/java/tools/refinery/language/ide/ProblemIdeSetup.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * generated by Xtext 2.25.0 - */ -package tools.refinery.language.ide; - -import org.eclipse.xtext.util.Modules2; - -import com.google.inject.Guice; -import com.google.inject.Injector; - -import tools.refinery.language.ProblemRuntimeModule; -import tools.refinery.language.ProblemStandaloneSetup; - -/** - * Initialization support for running Xtext languages as language servers. - */ -public class ProblemIdeSetup extends ProblemStandaloneSetup { - - @Override - public Injector createInjector() { - return Guice.createInjector(Modules2.mixin(new ProblemRuntimeModule(), new ProblemIdeModule())); - } - -} diff --git a/language-ide/src/main/java/tools/refinery/language/ide/contentassist/FuzzyMatcher.java b/language-ide/src/main/java/tools/refinery/language/ide/contentassist/FuzzyMatcher.java deleted file mode 100644 index fe722ca1..00000000 --- a/language-ide/src/main/java/tools/refinery/language/ide/contentassist/FuzzyMatcher.java +++ /dev/null @@ -1,44 +0,0 @@ -package tools.refinery.language.ide.contentassist; - -import org.eclipse.xtext.ide.editor.contentassist.IPrefixMatcher; - -import com.google.inject.Singleton; - -/** - * Implements the candidate matching algoritm used by CodeMirror 6. - * - * Using this class ensures that the same candidates will be returned when - * filtering content assist proposals on the server as on the client. - * - * The matching is "fuzzy" (fzf-like), i.e., the prefix characters - * may occur anywhere in the name, but must be in the same order as in the - * prefix. - * - * @author Kristóf Marussy - */ -@Singleton -public class FuzzyMatcher implements IPrefixMatcher { - @Override - public boolean isCandidateMatchingPrefix(String name, String prefix) { - var nameIgnoreCase = name.toLowerCase(); - var prefixIgnoreCase = prefix.toLowerCase(); - int prefixLength = prefixIgnoreCase.length(); - if (prefixLength == 0) { - return true; - } - int nameLength = nameIgnoreCase.length(); - if (prefixLength > nameLength) { - return false; - } - int prefixIndex = 0; - for (int nameIndex = 0; nameIndex < nameLength; nameIndex++) { - if (nameIgnoreCase.charAt(nameIndex) == prefixIgnoreCase.charAt(prefixIndex)) { - prefixIndex++; - if (prefixIndex == prefixLength) { - return true; - } - } - } - return false; - } -} diff --git a/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java b/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java deleted file mode 100644 index f828e836..00000000 --- a/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java +++ /dev/null @@ -1,77 +0,0 @@ -package tools.refinery.language.ide.contentassist; - -import java.util.Objects; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.xtext.CrossReference; -import org.eclipse.xtext.GrammarUtil; -import org.eclipse.xtext.ide.editor.contentassist.ContentAssistContext; -import org.eclipse.xtext.ide.editor.contentassist.ContentAssistEntry; -import org.eclipse.xtext.ide.editor.contentassist.IdeCrossrefProposalProvider; -import org.eclipse.xtext.nodemodel.util.NodeModelUtils; -import org.eclipse.xtext.resource.IEObjectDescription; - -import com.google.inject.Inject; - -import tools.refinery.language.model.ProblemUtil; -import tools.refinery.language.model.problem.Problem; -import tools.refinery.language.resource.ReferenceCounter; - -public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider { - @Inject - private ReferenceCounter referenceCounter; - - @Override - protected ContentAssistEntry createProposal(IEObjectDescription candidate, CrossReference crossRef, - ContentAssistContext context) { - if (!shouldCreateProposal(candidate, crossRef, context)) { - return null; - } - return super.createProposal(candidate, crossRef, context); - } - - protected boolean shouldCreateProposal(IEObjectDescription candidate, CrossReference crossRef, - ContentAssistContext context) { - var rootModel = context.getRootModel(); - var eObjectOrProxy = candidate.getEObjectOrProxy(); - if (!Objects.equals(rootModel.eResource(), eObjectOrProxy.eResource())) { - return true; - } - var currentValue = getCurrentValue(crossRef, context); - if (currentValue == null) { - return true; - } - var eObject = EcoreUtil.resolve(eObjectOrProxy, rootModel); - if (!Objects.equals(currentValue, eObject)) { - return true; - } - if (!ProblemUtil.isImplicit(eObject)) { - return true; - } - if (rootModel instanceof Problem problem) { - return referenceCounter.countReferences(problem, eObject) >= 2; - } - return true; - } - - protected EObject getCurrentValue(CrossReference crossRef, ContentAssistContext context) { - var value = getCurrentValue(crossRef, context.getCurrentModel()); - if (value != null) { - return value; - } - var currentNodeSemanticObject = NodeModelUtils.findActualSemanticObjectFor(context.getCurrentNode()); - return getCurrentValue(crossRef, currentNodeSemanticObject); - } - - protected EObject getCurrentValue(CrossReference crossRef, EObject context) { - if (context == null) { - return null; - } - var eReference = GrammarUtil.getReference(crossRef, context.eClass()); - if (eReference == null || eReference.isMany()) { - return null; - } - return (EObject) context.eGet(eReference); - } -} diff --git a/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java b/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java deleted file mode 100644 index 01ac33f7..00000000 --- a/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java +++ /dev/null @@ -1,122 +0,0 @@ -package tools.refinery.language.ide.syntaxcoloring; - -import java.util.List; - -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.xtext.ide.editor.syntaxcoloring.DefaultSemanticHighlightingCalculator; -import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor; -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.ProblemUtil; -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.ProblemPackage; -import tools.refinery.language.model.problem.ReferenceDeclaration; - -public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator { - private static final String BUILTIN_CLASS = "builtin"; - private static final String ABSTRACT_CLASS = "abstract"; - private static final String CONTAINMENT_CLASS = "containment"; - private static final String ERROR_CLASS = "error"; - private static final String NODE_CLASS = "node"; - private static final String INDIVIDUAL_NODE_CLASS = "individual"; - private static final String NEW_NODE_CLASS = "new"; - - @Inject - private OperationCanceledManager operationCanceledManager; - - @Override - protected boolean highlightElement(EObject object, IHighlightedPositionAcceptor acceptor, - CancelIndicator cancelIndicator) { - highlightName(object, acceptor); - highlightCrossReferences(object, acceptor, cancelIndicator); - return false; - } - - protected void highlightName(EObject object, IHighlightedPositionAcceptor acceptor) { - if (!(object instanceof NamedElement)) { - return; - } - String[] highlightClass = getHighlightClass(object, null); - if (highlightClass.length > 0) { - highlightFeature(acceptor, object, ProblemPackage.Literals.NAMED_ELEMENT__NAME, highlightClass); - } - } - - protected void highlightCrossReferences(EObject object, IHighlightedPositionAcceptor acceptor, - CancelIndicator cancelIndicator) { - for (EReference reference : object.eClass().getEAllReferences()) { - if (reference.isContainment()) { - continue; - } - operationCanceledManager.checkCanceled(cancelIndicator); - if (reference.isMany()) { - highlightManyValues(object, reference, acceptor); - } else { - highlightSingleValue(object, reference, acceptor); - } - } - } - - protected void highlightSingleValue(EObject object, EReference reference, IHighlightedPositionAcceptor acceptor) { - EObject valueObj = (EObject) object.eGet(reference); - String[] highlightClass = getHighlightClass(valueObj, reference); - if (highlightClass.length > 0) { - highlightFeature(acceptor, object, reference, highlightClass); - } - } - - protected void highlightManyValues(EObject object, EReference reference, IHighlightedPositionAcceptor acceptor) { - @SuppressWarnings("unchecked") - EList values = (EList) object.eGet(reference); - List nodes = NodeModelUtils.findNodesForFeature(object, reference); - int size = Math.min(values.size(), nodes.size()); - for (var i = 0; i < size; i++) { - EObject valueInList = values.get(i); - INode node = nodes.get(i); - String[] highlightClass = getHighlightClass(valueInList, reference); - if (highlightClass.length > 0) { - highlightNode(acceptor, node, highlightClass); - } - } - } - - protected String[] getHighlightClass(EObject eObject, EReference reference) { - if (ProblemUtil.isBuiltIn(eObject)) { - return new String[] { BUILTIN_CLASS }; - } - ImmutableList.Builder classesBuilder = ImmutableList.builder(); - if (eObject instanceof ClassDeclaration classDeclaration && classDeclaration.isAbstract()) { - classesBuilder.add(ABSTRACT_CLASS); - } - if (eObject instanceof ReferenceDeclaration referenceDeclaration && referenceDeclaration.isContainment()) { - classesBuilder.add(CONTAINMENT_CLASS); - } - if (eObject instanceof PredicateDefinition predicateDefinition && predicateDefinition.isError()) { - classesBuilder.add(ERROR_CLASS); - } - if (eObject instanceof Node node) { - if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_ARGUMENT__VARIABLE_OR_NODE) { - classesBuilder.add(NODE_CLASS); - } - if (ProblemUtil.isIndividualNode(node)) { - classesBuilder.add(INDIVIDUAL_NODE_CLASS); - } - if (ProblemUtil.isNewNode(node)) { - classesBuilder.add(NEW_NODE_CLASS); - } - } - List classes = classesBuilder.build(); - return classes.toArray(new String[0]); - } -} -- cgit v1.2.3-54-g00ecf