From 5cc9e724582ac4e302fad76d380c397ddeb27876 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Thu, 1 Feb 2018 14:28:01 +0100 Subject: Type coloring --- ...nfigurationSemanticHighlightingCalculator.xtend | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend (limited to 'Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend new file mode 100644 index 00000000..f99105be --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend @@ -0,0 +1,62 @@ +package hu.bme.mit.inf.dslreasoner.application.ui.highlight + +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement +import java.util.WeakHashMap +import org.eclipse.emf.ecore.EClassifier +import org.eclipse.xtext.ide.editor.syntaxcoloring.DefaultSemanticHighlightingCalculator +import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor +import org.eclipse.xtext.nodemodel.util.NodeModelUtils +import org.eclipse.xtext.resource.XtextResource +import org.eclipse.xtext.util.CancelIndicator + +class ApplicationConfigurationSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator { + public static val MetamodelElementIDPrefix = "MetamodelElementColor"; + + val metamodelElement2ID = new WeakHashMap + val colorCalculator = new ColorCalculator + + override provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) { + if (resource == null || resource.getParseResult() == null) { + return + } else { + val metamodelElements = resource.allContents.filter(MetamodelElement) +// val root = resource.getParseResult().getRootNode(); +// for (node : root.getAsTreeIterable()) { +// +// if (node.getGrammarElement() instanceof CrossReference) { +// acceptor.addPosition(node.getOffset(), node.getLength(), ApplicationConfigurationHighlightConfiguration.CROSS_REF); +// } +// } + while(metamodelElements.hasNext) { + val mentamodelElement = metamodelElements.next + val node = NodeModelUtils::getNode(mentamodelElement) + acceptor.addPosition( + node.getOffset(), + node.getLength(), + getMetamodelElementColorID(mentamodelElement) + ) + } + } + } + + def getMetamodelElementColorID(MetamodelElement element) { + val classifier = element.classifier + if(classifier === null) { + return "default" + } else if(classifier.eIsProxy) { + return "default" + } else { + if(metamodelElement2ID.containsKey(classifier)) { + return metamodelElement2ID.get(classifier) + } else { + val id = calculateMetamodelElementID(classifier) + metamodelElement2ID.put(classifier,id) + return id + } + } + } + private def String calculateMetamodelElementID(EClassifier c) { + val randomColor = colorCalculator.getColor(c) + '''«MetamodelElementIDPrefix» «randomColor.get(0)» «randomColor.get(1)» «randomColor.get(2)»''' + } +} -- cgit v1.2.3-70-g09d2