diff options
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend')
-rw-r--r-- | Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend | 62 |
1 files changed, 62 insertions, 0 deletions
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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.application.ui.highlight | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement | ||
4 | import java.util.WeakHashMap | ||
5 | import org.eclipse.emf.ecore.EClassifier | ||
6 | import org.eclipse.xtext.ide.editor.syntaxcoloring.DefaultSemanticHighlightingCalculator | ||
7 | import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor | ||
8 | import org.eclipse.xtext.nodemodel.util.NodeModelUtils | ||
9 | import org.eclipse.xtext.resource.XtextResource | ||
10 | import org.eclipse.xtext.util.CancelIndicator | ||
11 | |||
12 | class ApplicationConfigurationSemanticHighlightingCalculator extends DefaultSemanticHighlightingCalculator { | ||
13 | public static val MetamodelElementIDPrefix = "MetamodelElementColor"; | ||
14 | |||
15 | val metamodelElement2ID = new WeakHashMap<EClassifier,String> | ||
16 | val colorCalculator = new ColorCalculator | ||
17 | |||
18 | override provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) { | ||
19 | if (resource == null || resource.getParseResult() == null) { | ||
20 | return | ||
21 | } else { | ||
22 | val metamodelElements = resource.allContents.filter(MetamodelElement) | ||
23 | // val root = resource.getParseResult().getRootNode(); | ||
24 | // for (node : root.getAsTreeIterable()) { | ||
25 | // | ||
26 | // if (node.getGrammarElement() instanceof CrossReference) { | ||
27 | // acceptor.addPosition(node.getOffset(), node.getLength(), ApplicationConfigurationHighlightConfiguration.CROSS_REF); | ||
28 | // } | ||
29 | // } | ||
30 | while(metamodelElements.hasNext) { | ||
31 | val mentamodelElement = metamodelElements.next | ||
32 | val node = NodeModelUtils::getNode(mentamodelElement) | ||
33 | acceptor.addPosition( | ||
34 | node.getOffset(), | ||
35 | node.getLength(), | ||
36 | getMetamodelElementColorID(mentamodelElement) | ||
37 | ) | ||
38 | } | ||
39 | } | ||
40 | } | ||
41 | |||
42 | def getMetamodelElementColorID(MetamodelElement element) { | ||
43 | val classifier = element.classifier | ||
44 | if(classifier === null) { | ||
45 | return "default" | ||
46 | } else if(classifier.eIsProxy) { | ||
47 | return "default" | ||
48 | } else { | ||
49 | if(metamodelElement2ID.containsKey(classifier)) { | ||
50 | return metamodelElement2ID.get(classifier) | ||
51 | } else { | ||
52 | val id = calculateMetamodelElementID(classifier) | ||
53 | metamodelElement2ID.put(classifier,id) | ||
54 | return id | ||
55 | } | ||
56 | } | ||
57 | } | ||
58 | private def String calculateMetamodelElementID(EClassifier c) { | ||
59 | val randomColor = colorCalculator.getColor(c) | ||
60 | '''«MetamodelElementIDPrefix» «randomColor.get(0)» «randomColor.get(1)» «randomColor.get(2)»''' | ||
61 | } | ||
62 | } | ||