From 8a7b9b436b31e6d2f5a0521a077c960ebdeb4cbe Mon Sep 17 00:00:00 2001 From: Oszkar Semerath Date: Tue, 28 Apr 2020 20:43:04 +0200 Subject: initial commit --- .../language/ui/SolverLanguageUiModule.xtend | 24 +++++++++ .../SolverLanguageProposalProvider.xtend | 12 +++++ .../SolverSemanticHighlightCalculator.xtend | 58 ++++++++++++++++++++++ .../SolverSemanticTextAttributeProvider.xtend | 57 +++++++++++++++++++++ .../SolverLanguageDescriptionLabelProvider.xtend | 24 +++++++++ .../ui/labeling/SolverLanguageLabelProvider.xtend | 31 ++++++++++++ .../SolverLanguageOutlineTreeProvider.xtend | 15 ++++++ .../quickfix/SolverLanguageQuickfixProvider.xtend | 24 +++++++++ 8 files changed, 245 insertions(+) create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/SolverLanguageUiModule.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/contentassist/SolverLanguageProposalProvider.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticTextAttributeProvider.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageDescriptionLabelProvider.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageLabelProvider.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/outline/SolverLanguageOutlineTreeProvider.xtend create mode 100644 Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/quickfix/SolverLanguageQuickfixProvider.xtend (limited to 'Application/org.eclipse.viatra.solver.language.ui/src') diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/SolverLanguageUiModule.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/SolverLanguageUiModule.xtend new file mode 100644 index 00000000..1c165a0a --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/SolverLanguageUiModule.xtend @@ -0,0 +1,24 @@ +/* + * generated by Xtext 2.18.0.M3 + */ +package org.eclipse.viatra.solver.language.ui + +import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor +import org.eclipse.xtext.ide.editor.syntaxcoloring.ISemanticHighlightingCalculator +import org.eclipse.xtext.ui.editor.syntaxcoloring.ITextAttributeProvider +import org.eclipse.viatra.solver.language.ui.highlight.SolverSemanticHighlightCalculator +import org.eclipse.viatra.solver.language.ui.highlight.SolverSemanticTextAttributeProvider + +/** + * Use this class to register components to be used within the Eclipse IDE. + */ +@FinalFieldsConstructor +class SolverLanguageUiModule extends AbstractSolverLanguageUiModule { + def Class bindISemanticHighlightingCalculator() { + SolverSemanticHighlightCalculator + } + + def Class bindITextAttributeProvider() { + SolverSemanticTextAttributeProvider + } +} diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/contentassist/SolverLanguageProposalProvider.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/contentassist/SolverLanguageProposalProvider.xtend new file mode 100644 index 00000000..9b6ab0fc --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/contentassist/SolverLanguageProposalProvider.xtend @@ -0,0 +1,12 @@ +/* + * generated by Xtext 2.18.0.M3 + */ +package org.eclipse.viatra.solver.language.ui.contentassist + + +/** + * See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#content-assist + * on how to customize the content assistant. + */ +class SolverLanguageProposalProvider extends AbstractSolverLanguageProposalProvider { +} diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend new file mode 100644 index 00000000..c9ceb36a --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/highlight/SolverSemanticHighlightCalculator.xtend @@ -0,0 +1,58 @@ +package org.eclipse.viatra.solver.language.ui.highlight + +import java.util.Random +import java.util.WeakHashMap +import org.eclipse.viatra.solver.language.solverLanguage.ModelSymbol +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 SolverSemanticHighlightCalculator extends DefaultSemanticHighlightingCalculator { + public static val SmybolCode = "SymbolCode" + + val symbolName2ID = new WeakHashMap + + override provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor, CancelIndicator cancelIndicator) { + if (resource === null || resource.getParseResult() === null) { + return + } else { + val modelSymbols = resource.allContents.filter(ModelSymbol) + while(modelSymbols.hasNext) { + val symbolElement = modelSymbols.next + val node = NodeModelUtils::getNode(symbolElement) + acceptor.addPosition( + node.getOffset(), + node.getLength(), + getSymbolCode(symbolElement.name) + ) + } + } + } + + def getSymbolCode(String name) { + if(symbolName2ID.containsKey(name)) { + return symbolName2ID.get(name) + } else { + val id = calculateSymbolCode(name) + symbolName2ID.put(name,id) + return id + } + } + + def String calculateSymbolCode(String name) { + val Random random = new Random(name.hashCode) + val hue = huePick(random.nextFloat) + val saturation = 0.1+random.nextFloat*0.2 + val brightness = random.nextFloat/4+0.7f + return '''«SmybolCode» «hue» «saturation» «brightness»''' + } + private def huePick(float random) { + val pink = 300 + val tolerance = 10 + val degree = random*(360-2*tolerance) + if(degree + + @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(SolverSemanticHighlightCalculator::SmybolCode) + } + + private def TextAttribute metamodelElementTextStyle(String id) { + val texts = id.split(' ') + val backgroundColor = new RGB( + Float.parseFloat(texts.get(1)), + Float.parseFloat(texts.get(2)), + Float.parseFloat(texts.get(3)) + ) + return new TextAttribute( + EditorUtils.colorFromRGB(defaultTextStyle.color), + EditorUtils.colorFromRGB(backgroundColor), + defaultTextStyle.style, + EditorUtils.fontFromFontData(defaultTextStyle.getFontData())); + } + +} \ No newline at end of file diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageDescriptionLabelProvider.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageDescriptionLabelProvider.xtend new file mode 100644 index 00000000..32f81edc --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageDescriptionLabelProvider.xtend @@ -0,0 +1,24 @@ +/* + * generated by Xtext 2.18.0.M3 + */ +package org.eclipse.viatra.solver.language.ui.labeling + +import org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider + +/** + * Provides labels for IEObjectDescriptions and IResourceDescriptions. + * + * See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#label-provider + */ +class SolverLanguageDescriptionLabelProvider extends DefaultDescriptionLabelProvider { + + // Labels and icons can be computed like this: + +// override text(IEObjectDescription ele) { +// ele.name.toString +// } +// +// override image(IEObjectDescription ele) { +// ele.EClass.name + '.gif' +// } +} diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageLabelProvider.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageLabelProvider.xtend new file mode 100644 index 00000000..c2d8ac75 --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/labeling/SolverLanguageLabelProvider.xtend @@ -0,0 +1,31 @@ +/* + * generated by Xtext 2.18.0.M3 + */ +package org.eclipse.viatra.solver.language.ui.labeling + +import com.google.inject.Inject +import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider +import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider + +/** + * Provides labels for EObjects. + * + * See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#label-provider + */ +class SolverLanguageLabelProvider extends DefaultEObjectLabelProvider { + + @Inject + new(AdapterFactoryLabelProvider delegate) { + super(delegate); + } + + // Labels and icons can be computed like this: + +// def text(Greeting ele) { +// 'A greeting to ' + ele.name +// } +// +// def image(Greeting ele) { +// 'Greeting.gif' +// } +} diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/outline/SolverLanguageOutlineTreeProvider.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/outline/SolverLanguageOutlineTreeProvider.xtend new file mode 100644 index 00000000..abd2855c --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/outline/SolverLanguageOutlineTreeProvider.xtend @@ -0,0 +1,15 @@ +/* + * generated by Xtext 2.18.0.M3 + */ +package org.eclipse.viatra.solver.language.ui.outline + +import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider + +/** + * Customization of the default outline structure. + * + * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#outline + */ +class SolverLanguageOutlineTreeProvider extends DefaultOutlineTreeProvider { + +} diff --git a/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/quickfix/SolverLanguageQuickfixProvider.xtend b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/quickfix/SolverLanguageQuickfixProvider.xtend new file mode 100644 index 00000000..42f81255 --- /dev/null +++ b/Application/org.eclipse.viatra.solver.language.ui/src/org/eclipse/viatra/solver/language/ui/quickfix/SolverLanguageQuickfixProvider.xtend @@ -0,0 +1,24 @@ +/* + * generated by Xtext 2.18.0.M3 + */ +package org.eclipse.viatra.solver.language.ui.quickfix + +import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider + +/** + * Custom quickfixes. + * + * See https://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#quick-fixes + */ +class SolverLanguageQuickfixProvider extends DefaultQuickfixProvider { + +// @Fix(SolverLanguageValidator.INVALID_NAME) +// def capitalizeName(Issue issue, IssueResolutionAcceptor acceptor) { +// acceptor.accept(issue, 'Capitalize name', 'Capitalize the name.', 'upcase.png') [ +// context | +// val xtextDocument = context.xtextDocument +// val firstLetter = xtextDocument.get(issue.offset, 1) +// xtextDocument.replace(issue.offset, 1, firstLetter.toUpperCase) +// ] +// } +} -- cgit v1.2.3-70-g09d2