From 5cc9e724582ac4e302fad76d380c397ddeb27876 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Thu, 1 Feb 2018 14:28:01 +0100 Subject: Type coloring --- ...ctApplicationConfigurationProposalProvider.java | 260 ++++++++++++++++++++- .../ui/ApplicationConfigurationUiModule.xtend | 18 +- ...nfigurationSemanticHighlightingCalculator.xtend | 62 +++++ .../application/ui/highlight/ColorCalculator.xtend | 38 +++ ...modelElementColoringTextAttributeProvider.xtend | 56 +++++ 5 files changed, 432 insertions(+), 2 deletions(-) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ApplicationConfigurationSemanticHighlightingCalculator.xtend create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/MetamodelElementColoringTextAttributeProvider.xtend (limited to 'Application/hu.bme.mit.inf.dslreasoner.application.ui') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src-gen/hu/bme/mit/inf/dslreasoner/application/ui/contentassist/AbstractApplicationConfigurationProposalProvider.java b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src-gen/hu/bme/mit/inf/dslreasoner/application/ui/contentassist/AbstractApplicationConfigurationProposalProvider.java index 1409ec26..b0d69137 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src-gen/hu/bme/mit/inf/dslreasoner/application/ui/contentassist/AbstractApplicationConfigurationProposalProvider.java +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src-gen/hu/bme/mit/inf/dslreasoner/application/ui/contentassist/AbstractApplicationConfigurationProposalProvider.java @@ -30,6 +30,18 @@ public abstract class AbstractApplicationConfigurationProposalProvider extends T public void completeViatraImport_ImportedViatra(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); } + public void completeFileSpecification_Path(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeFileDeclaration_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeFileDeclaration_Specification(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeFileReference_Referred(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } public void completeMetamodelSpecification_Entries(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); } @@ -57,6 +69,138 @@ public abstract class AbstractApplicationConfigurationProposalProvider extends T public void completeMetamodelReference_Referred(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); } + public void completePartialModelSpecification_Entry(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeModelEntry_Path(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeFolderEntry_Path(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeFolderEntry_Exclusion(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completePartialModelDeclaration_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completePartialModelDeclaration_Specification(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completePartialModelReference_Referred(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completePatternSpecification_Entries(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeAllPatternEntry_Package(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completeAllPatternEntry_Exclusuion(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completePatternElement_Package(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completePatternElement_Pattern(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completeGraphPatternDeclaration_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGraphPatternDeclaration_Specification(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGraphPatternReference_Referred(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completeConfigSpecification_Entries(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeConfigDeclaration_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeConfigDeclaration_Specification(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeConfigEntry_Key(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeConfigEntry_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeConfigReference_Config(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completeScopeSpecification_Scopes(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeTypeScope_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeTypeScope_SetsNew(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void completeTypeScope_SetsSum(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void completeTypeScope_Min(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeTypeScope_MaxUnlimited(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void completeTypeScope_Max(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeClassReference_Element(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeScopeDeclaration_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeScopeDeclaration_Specification(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeScopeReference_Referred(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Metamodel(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_PartialModel(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Patterns(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Scope(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Number(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Runs(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Solver(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_Config(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_TagetFolder(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_DebugFolder(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_TargetLogFile(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } + public void completeGenerationTask_TargetStatisticsFile(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); + } public void complete_ConfigurationScript(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // subclasses may override @@ -64,7 +208,7 @@ public abstract class AbstractApplicationConfigurationProposalProvider extends T public void complete_Command(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // subclasses may override } - public void complete_Declaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + public void complete_QualifiedName(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // subclasses may override } public void complete_Import(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { @@ -76,6 +220,21 @@ public abstract class AbstractApplicationConfigurationProposalProvider extends T public void complete_ViatraImport(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // subclasses may override } + public void complete_Declaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_FileSpecification(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_FileDeclaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_FileReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_File(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } public void complete_MetamodelSpecification(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // subclasses may override } @@ -97,4 +256,103 @@ public abstract class AbstractApplicationConfigurationProposalProvider extends T public void complete_Metamodel(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { // subclasses may override } + public void complete_PartialModelSpecification(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PartialModelEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ModelEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_FolderEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PartialModelDeclaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PartialModelReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PartialModel(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PatternSpecification(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PatternEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_AllPatternEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_PatternElement(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_GraphPatternDeclaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_GraphPatternReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_GraphPattern(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ConfigSpecification(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ConfigDeclaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ConfigEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ConfigReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_Config(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_Solver(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ScopeSpecification(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_TypeScope(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_TypeReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ClassReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ObjectReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_IntegerReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_RealReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_StringReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ScopeDeclaration(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_ScopeReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_Scope(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_Task(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } + public void complete_GenerationTask(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { + // subclasses may override + } } diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/ApplicationConfigurationUiModule.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/ApplicationConfigurationUiModule.xtend index ad86ba44..6bc65f7b 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/ApplicationConfigurationUiModule.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/ApplicationConfigurationUiModule.xtend @@ -3,11 +3,27 @@ */ package hu.bme.mit.inf.dslreasoner.application.ui +import hu.bme.mit.inf.dslreasoner.application.ui.highlight.ApplicationConfigurationSemanticHighlightingCalculator +import hu.bme.mit.inf.dslreasoner.application.ui.highlight.MetamodelElementColoringTextAttributeProvider import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor +import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator +import org.eclipse.xtext.ui.editor.syntaxcoloring.ITextAttributeProvider /** * Use this class to register components to be used within the Eclipse IDE. */ @FinalFieldsConstructor class ApplicationConfigurationUiModule extends AbstractApplicationConfigurationUiModule { -} + +// def public Class bindIHighlightingConfiguration() { +// ApplicationConfigurationHighlightConfiguration +// } + + def public Class bindISemanticHighlightingCalculator() { + ApplicationConfigurationSemanticHighlightingCalculator + } + + def public Class bindITextAttributeProvider() { + MetamodelElementColoringTextAttributeProvider + } +} \ No newline at end of file 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)»''' + } +} diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend new file mode 100644 index 00000000..d0f9db88 --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend @@ -0,0 +1,38 @@ +package hu.bme.mit.inf.dslreasoner.application.ui.highlight + +import java.util.List +import java.util.Random +import org.eclipse.emf.ecore.EClass +import org.eclipse.emf.ecore.EEnum + +class ColorCalculator { + + public def dispatch getColor(EClass c) { + val supertypes = (c.getEAllSuperTypes + #[c]) + val typeHashcodes = supertypes.map[(c.getEPackage.nsURI->c.name).hashCode] + return randomColor(typeHashcodes) + } + public def dispatch getColor(EEnum e) { + return randomColor((e.getEPackage.nsURI->e.name).hashCode) + } + + protected def randomColor(Integer seed) { + val Random random = new Random(seed) + val rangePicker = [|random.nextInt(128)+128] + return #[rangePicker.apply(), rangePicker.apply(), rangePicker.apply()] + } + protected def randomColor(Iterable seeds) { seeds.map[randomColor].averageColor } + private def averageColor(Iterable> colors) { + if(colors.empty) { + return #[256,256,256] + } else { + return #[ + colors.map[get(0)].average, + colors.map[get(1)].average, + colors.map[get(2)].average + ] + } + } + private def average(Iterable doubles) { return doubles.reduce[p1, p2|p1+p2]/doubles.size } +} + diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/MetamodelElementColoringTextAttributeProvider.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/MetamodelElementColoringTextAttributeProvider.xtend new file mode 100644 index 00000000..10b96d02 --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/MetamodelElementColoringTextAttributeProvider.xtend @@ -0,0 +1,56 @@ +package hu.bme.mit.inf.dslreasoner.application.ui.highlight + +import com.google.inject.Inject +import java.util.WeakHashMap +import org.eclipse.jface.text.TextAttribute +import org.eclipse.swt.graphics.RGB +import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess +import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfiguration +import org.eclipse.xtext.ui.editor.syntaxcoloring.PreferenceStoreAccessor +import org.eclipse.xtext.ui.editor.syntaxcoloring.TextAttributeProvider +import org.eclipse.xtext.ui.editor.utils.TextStyle +import org.eclipse.xtext.ui.editor.utils.EditorUtils +import org.eclipse.swt.SWT + +class MetamodelElementColoringTextAttributeProvider extends TextAttributeProvider{ + + val defaultTextStyle = new TextStyle + val colorID2TextAttribute = new WeakHashMap + + @Inject + new(IHighlightingConfiguration highlightingConfig, IPreferenceStoreAccess preferenceStoreAccess, PreferenceStoreAccessor prefStoreAccessor) { + super(highlightingConfig, preferenceStoreAccess, prefStoreAccessor) + } + + override getAttribute(String id) { + if(isMetamodelElementColorID(id)) { + if(colorID2TextAttribute.containsKey(id)) { + return colorID2TextAttribute.get(id) + } else { + val style = metamodelElementTextStyle(id) + colorID2TextAttribute.put(id,style) + return style + } + } else { + super.getAttribute(id) + } + } + + private def isMetamodelElementColorID(String id) { + id.startsWith(ApplicationConfigurationSemanticHighlightingCalculator::MetamodelElementIDPrefix) + } + + private def TextAttribute metamodelElementTextStyle(String id) { + val texts = id.split(' ') + val backgroundColor = new RGB( + Integer.parseInt(texts.get(1)), + Integer.parseInt(texts.get(2)), + Integer.parseInt(texts.get(3)) + ) + return new TextAttribute( + EditorUtils.colorFromRGB(defaultTextStyle.color), + EditorUtils.colorFromRGB(backgroundColor), + defaultTextStyle.style.bitwiseAnd(SWT.BORDER), + EditorUtils.fontFromFontData(defaultTextStyle.getFontData())); + } +} -- cgit v1.2.3-54-g00ecf