WIP Prettier Xtext labels
diff --git a/plugins/org.eclipse.ocl.xtext.base/plugin.xml b/plugins/org.eclipse.ocl.xtext.base/plugin.xml
index 70a5f0b..6c3ebf6 100644
--- a/plugins/org.eclipse.ocl.xtext.base/plugin.xml
+++ b/plugins/org.eclipse.ocl.xtext.base/plugin.xml
@@ -19,6 +19,14 @@
<extension point="org.eclipse.ocl.pivot.label_generator">
<generator for="org.eclipse.ocl.xtext.basecs.NamedElementCS"
class="org.eclipse.ocl.xtext.base.utilities.NamedElementCSLabelGenerator"/>
+ <generator for="org.eclipse.xtext.AbstractElement"
+ class="org.eclipse.ocl.xtext.base.utilities.XtextAbstractElementLabelGenerator"/>
+ <generator for="org.eclipse.xtext.AbstractMetamodelDeclaration"
+ class="org.eclipse.ocl.xtext.base.utilities.XtextAbstractMetamodelDeclarationLabelGenerator"/>
+ <generator for="org.eclipse.xtext.AbstractRule"
+ class="org.eclipse.ocl.xtext.base.utilities.XtextAbstractRuleLabelGenerator"/>
+ <generator for="org.eclipse.xtext.Grammar"
+ class="org.eclipse.ocl.xtext.base.utilities.XtextGrammarLabelGenerator"/>
</extension>
</plugin>
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/BaseStandaloneSetup.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/BaseStandaloneSetup.java
index be3a36b..8a66697 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/BaseStandaloneSetup.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/BaseStandaloneSetup.java
@@ -19,6 +19,10 @@
import org.eclipse.ocl.pivot.utilities.PivotStandaloneSetup;
import org.eclipse.ocl.xtext.base.scoping.BaseScoping;
import org.eclipse.ocl.xtext.base.utilities.NamedElementCSLabelGenerator;
+import org.eclipse.ocl.xtext.base.utilities.XtextAbstractElementLabelGenerator;
+import org.eclipse.ocl.xtext.base.utilities.XtextAbstractMetamodelDeclarationLabelGenerator;
+import org.eclipse.ocl.xtext.base.utilities.XtextAbstractRuleLabelGenerator;
+import org.eclipse.ocl.xtext.base.utilities.XtextGrammarLabelGenerator;
import org.eclipse.ocl.xtext.basecs.BaseCSPackage;
import org.eclipse.ocl.xtext.basecs.util.BaseCSValidator;
@@ -48,6 +52,10 @@
EPackage.Registry.INSTANCE.put(BaseCSPackage.eNS_URI, BaseCSPackage.eINSTANCE);
EValidator.Registry.INSTANCE.put(BaseCSPackage.eINSTANCE, BaseCSValidator.INSTANCE);
NamedElementCSLabelGenerator.initialize(ILabelGenerator.Registry.INSTANCE);
+ XtextAbstractElementLabelGenerator.initialize(ILabelGenerator.Registry.INSTANCE);
+ XtextAbstractMetamodelDeclarationLabelGenerator.initialize(ILabelGenerator.Registry.INSTANCE);
+ XtextAbstractRuleLabelGenerator.initialize(ILabelGenerator.Registry.INSTANCE);
+ XtextGrammarLabelGenerator.initialize(ILabelGenerator.Registry.INSTANCE);
}
/**
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractElementLabelGenerator.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractElementLabelGenerator.java
new file mode 100644
index 0000000..c813e10
--- /dev/null
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractElementLabelGenerator.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.xtext.base.utilities;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.labels.AbstractLabelGenerator;
+import org.eclipse.xtext.AbstractElement;
+import org.eclipse.xtext.AbstractRule;
+import org.eclipse.xtext.Action;
+import org.eclipse.xtext.Alternatives;
+import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.Group;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.TypeRef;
+import org.eclipse.xtext.util.XtextSwitch;
+
+public final class XtextAbstractElementLabelGenerator extends AbstractLabelGenerator<AbstractElement>
+{
+ private class Xtext2String extends XtextSwitch<Object>
+ {
+ protected final @NonNull Builder labelBuilder;
+
+ public Xtext2String(@NonNull Builder labelBuilder) {
+ this.labelBuilder = labelBuilder;
+ }
+
+ @Override
+ public Object caseAbstractRule(AbstractRule object) {
+ String name = object.getName();
+ if (name != null) {
+ labelBuilder.appendString(name);
+ return this;
+ }
+ return null;
+ }
+
+ @Override
+ public Object caseAction(Action object) {
+ String feature = object.getFeature();
+ String operator = object.getOperator();
+ TypeRef type = object.getType();
+ labelBuilder.appendString("{");
+ if (type != null) {
+ labelBuilder.appendString(type.getClassifier().getName());
+ }
+ if (feature != null) {
+ labelBuilder.appendString(".");
+ labelBuilder.appendString(feature);
+ }
+ if (operator != null) {
+ labelBuilder.appendString(operator);
+ labelBuilder.appendString("current");
+ }
+ labelBuilder.appendString("}");
+ labelBuilder.appendString(object.getCardinality());
+ return this;
+ }
+
+ @Override
+ public Object caseAlternatives(Alternatives object) {
+ labelBuilder.appendString("(");
+ boolean isFirst = true;
+ for (AbstractElement element : object.getElements()) {
+ if (!isFirst) {
+ labelBuilder.appendString(" | ");
+ }
+ doSwitch(element);
+ isFirst = false;
+ }
+ labelBuilder.appendString(")");
+ labelBuilder.appendString(object.getCardinality());
+ return this;
+ }
+
+ @Override
+ public Object caseAssignment(Assignment object) {
+ String feature = object.getFeature();
+ if (feature != null) {
+ labelBuilder.appendString(feature);
+ }
+ String operator = object.getOperator();
+ if (operator != null) {
+ labelBuilder.appendString(operator);
+ }
+ AbstractElement terminal = object.getTerminal();
+ if (terminal != null) {
+ doSwitch(terminal);
+ labelBuilder.appendString(object.getCardinality());
+ return this;
+ }
+ return null;
+ }
+
+ @Override
+ public Object caseGroup(Group object) {
+ labelBuilder.appendString("(");
+ boolean isFirst = true;
+ for (AbstractElement element : object.getElements()) {
+ if (!isFirst) {
+ labelBuilder.appendString(" ");
+ }
+ doSwitch(element);
+ isFirst = false;
+ }
+ labelBuilder.appendString(")");
+ labelBuilder.appendString(object.getCardinality());
+ return this;
+ }
+
+ @Override
+ public Object caseKeyword(Keyword object) {
+ String value = object.getValue();
+ if (value != null) {
+ labelBuilder.appendString("'");
+ labelBuilder.appendString(value);
+ labelBuilder.appendString("'");
+ labelBuilder.appendString(object.getCardinality());
+ return this;
+ }
+ return null;
+ }
+
+ @Override
+ public Object caseRuleCall(RuleCall object) {
+ AbstractRule rule = object.getRule();
+ if (rule != null) {
+ doSwitch(rule);
+ labelBuilder.appendString(object.getCardinality());
+ return this;
+ }
+ return null;
+ }
+
+ @Override
+ public Object defaultCase(EObject object) {
+ labelBuilder.appendString(object.getClass().getSimpleName());
+ return this;
+ }
+
+ }
+
+ public static void initialize(Registry registry) {
+ registry.install(AbstractElement.class, new XtextAbstractElementLabelGenerator());
+ }
+
+ public XtextAbstractElementLabelGenerator() {
+ super(AbstractElement.class);
+ }
+
+ @Override
+ public void buildLabelFor(@NonNull Builder labelBuilder, @NonNull AbstractElement object) {
+ new Xtext2String(labelBuilder).doSwitch(object);
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractMetamodelDeclarationLabelGenerator.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractMetamodelDeclarationLabelGenerator.java
new file mode 100644
index 0000000..359e07c
--- /dev/null
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractMetamodelDeclarationLabelGenerator.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.xtext.base.utilities;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.labels.AbstractLabelGenerator;
+import org.eclipse.xtext.AbstractMetamodelDeclaration;
+
+public final class XtextAbstractMetamodelDeclarationLabelGenerator extends AbstractLabelGenerator<AbstractMetamodelDeclaration>
+{
+ public static void initialize(Registry registry) {
+ registry.install(AbstractMetamodelDeclaration.class, new XtextAbstractMetamodelDeclarationLabelGenerator());
+ }
+
+ public XtextAbstractMetamodelDeclarationLabelGenerator() {
+ super(AbstractMetamodelDeclaration.class);
+ }
+
+ @Override
+ public void buildLabelFor(@NonNull Builder labelBuilder, @NonNull AbstractMetamodelDeclaration object) {
+ EPackage ePackage = object.getEPackage();
+ String nsURI = ePackage != null ? ePackage.getNsURI() : null;
+ if (nsURI != null)
+ labelBuilder.appendString(nsURI);
+ else {
+ labelBuilder.appendString("<null-nsURI-");
+ labelBuilder.appendString(object.getClass().getSimpleName());
+ labelBuilder.appendString(">");
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractRuleLabelGenerator.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractRuleLabelGenerator.java
new file mode 100644
index 0000000..7cdb1aa
--- /dev/null
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextAbstractRuleLabelGenerator.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.xtext.base.utilities;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.labels.AbstractLabelGenerator;
+import org.eclipse.xtext.AbstractRule;
+
+public final class XtextAbstractRuleLabelGenerator extends AbstractLabelGenerator<AbstractRule>
+{
+ public static void initialize(Registry registry) {
+ registry.install(AbstractRule.class, new XtextAbstractRuleLabelGenerator());
+ }
+
+ public XtextAbstractRuleLabelGenerator() {
+ super(AbstractRule.class);
+ }
+
+ @Override
+ public void buildLabelFor(@NonNull Builder labelBuilder, @NonNull AbstractRule object) {
+ String name = object.getName();
+ if (name != null)
+ labelBuilder.appendString(name);
+ else {
+ labelBuilder.appendString("<null-named-");
+ labelBuilder.appendString(object.getClass().getSimpleName());
+ labelBuilder.appendString(">");
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextActionLabelGenerator.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextActionLabelGenerator.java
new file mode 100644
index 0000000..5090e21
--- /dev/null
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextActionLabelGenerator.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.xtext.base.utilities;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.labels.AbstractLabelGenerator;
+import org.eclipse.xtext.Action;
+import org.eclipse.xtext.TypeRef;
+
+public final class XtextActionLabelGenerator extends AbstractLabelGenerator<Action>
+{
+ public static void initialize(Registry registry) {
+ registry.install(Action.class, new XtextActionLabelGenerator());
+ }
+
+ public XtextActionLabelGenerator() {
+ super(Action.class);
+ }
+
+ @Override
+ public void buildLabelFor(@NonNull Builder labelBuilder, @NonNull Action object) {
+ String feature = object.getFeature();
+ String operator = object.getOperator();
+ TypeRef type = object.getType();
+ if (type != null) {
+ labelBuilder.appendString(type.getClassifier().getName());
+ }
+ if (feature != null) {
+ labelBuilder.appendString(".");
+ labelBuilder.appendString(feature);
+ }
+ if (feature != null) {
+ labelBuilder.appendString(operator);
+ labelBuilder.appendString("current");
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextGrammarLabelGenerator.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextGrammarLabelGenerator.java
new file mode 100644
index 0000000..349840d
--- /dev/null
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/utilities/XtextGrammarLabelGenerator.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ocl.xtext.base.utilities;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.labels.AbstractLabelGenerator;
+import org.eclipse.xtext.Grammar;
+
+public final class XtextGrammarLabelGenerator extends AbstractLabelGenerator<Grammar>
+{
+ public static void initialize(Registry registry) {
+ registry.install(Grammar.class, new XtextGrammarLabelGenerator());
+ }
+
+ public XtextGrammarLabelGenerator() {
+ super(Grammar.class);
+ }
+
+ @Override
+ public void buildLabelFor(@NonNull Builder labelBuilder, @NonNull Grammar object) {
+ String name = object.getName();
+ if (name != null)
+ labelBuilder.appendString(name);
+ else {
+ labelBuilder.appendString("<null-named-");
+ labelBuilder.appendString(object.getClass().getSimpleName());
+ labelBuilder.appendString(">");
+ }
+ }
+}
\ No newline at end of file