aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend
diff options
context:
space:
mode:
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.xtend62
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 @@
1package hu.bme.mit.inf.dslreasoner.application.ui.highlight
2
3import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement
4import java.util.WeakHashMap
5import org.eclipse.emf.ecore.EClassifier
6import org.eclipse.xtext.ide.editor.syntaxcoloring.DefaultSemanticHighlightingCalculator
7import org.eclipse.xtext.ide.editor.syntaxcoloring.IHighlightedPositionAcceptor
8import org.eclipse.xtext.nodemodel.util.NodeModelUtils
9import org.eclipse.xtext.resource.XtextResource
10import org.eclipse.xtext.util.CancelIndicator
11
12class 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}