Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2014-07-25 02:58:00 +0000
committerChristian W. Damus2014-07-25 02:58:58 +0000
commitc1c9a9e24dbd08f55073fd7c35d025f96a30ec88 (patch)
treed3b3b84b0231337a9ef70e21377d02e04479b78f /plugins/developer/org.eclipse.papyrus.def/xtend
parent143014ab408abddd23f7b0e99551bda3fcd85978 (diff)
downloadorg.eclipse.papyrus-c1c9a9e24dbd08f55073fd7c35d025f96a30ec88.tar.gz
org.eclipse.papyrus-c1c9a9e24dbd08f55073fd7c35d025f96a30ec88.tar.xz
org.eclipse.papyrus-c1c9a9e24dbd08f55073fd7c35d025f96a30ec88.zip
440263: [All Diagrams] Do not set default names for relationships
https://bugs.eclipse.org/bugs/show_bug.cgi?id=440263 Deprecate/replace redundant NamedElement name initialization utility classes and make NamedElementUtil the canonical API for this purpose. Suppress default names for several relationship and relationship-like metaclasses in NamedElementUtil. Includes tweaks to existing diagram JUnit tests to adapt to the changed auto-naming requirements. Clean up persistent Xtend-generated sources that trip up on line-ending differences on Mac. Override the element initializer template from GMF to test whether the initial value is not null before attempting to set it, to avoid explicitly setting nulls in unsettable features such as UML::NamedElement::name. Update diagram generation models (except Sequence Diagram, which seems to be using some other templates) to use the element-sensitive initial name API and re-generate their ElementInitializers classes. Add some basic unit tests for the NamedElementUtil API. Change-Id: Icf2ee05a632c1f5988383c0348b8609c3dccf6be
Diffstat (limited to 'plugins/developer/org.eclipse.papyrus.def/xtend')
-rw-r--r--plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend64
1 files changed, 61 insertions, 3 deletions
diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend
index dce40f12446..4d3c2b373d9 100644
--- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend
+++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2007, 2010, 2013 Borland Software Corporation and others
+ * Copyright (c) 2007, 2014 Borland Software Corporation, CEA, and others
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -12,18 +12,33 @@
* [221347] Got rid of generated interfaces
* (IObjectInitializer, IFeatureInitializer) and implementation thereof
* Michael Golubev (Montages) - #386838 - migrate to Xtend2
+ * Christian W. Damus (CEA) - bug 440263
*/
package aspects.xpt.providers
import com.google.inject.Singleton
import org.eclipse.gmf.codegen.gmfgen.GenLink
-import org.eclipse.gmf.codegen.gmfgen.GenNode
-
+import org.eclipse.gmf.codegen.gmfgen.GenNode import org.eclipse.gmf.codegen.gmfgen.GenFeatureValueSpec
+import org.eclipse.gmf.codegen.gmfgen.GenCommonBase
+import org.eclipse.emf.codegen.ecore.genmodel.GenClass
+import java.util.List
+import org.eclipse.gmf.codegen.gmfgen.GenLanguage
+import com.google.inject.Inject
+import metamodel.MetaModel
+import xpt.expressions.AbstractExpression
+import xpt.providers.ElementInitializers_qvto
+import aspects.xpt.Common
+
/**
* XXX should generate this class only when there is initialization logic defined in the model
*/
@Singleton class ElementInitializers extends xpt.providers.ElementInitializers {
+ @Inject extension Common;
+ @Inject extension ElementInitializers_qvto;
+
+ @Inject AbstractExpression xptAbstractExpression;
+ @Inject MetaModel xptMetaModel
/////////////////////////////////
override dispatch CharSequence javaMethod(GenNode it) '''
@@ -38,5 +53,48 @@ import org.eclipse.gmf.codegen.gmfgen.GenNode
«ENDIF»
'''
+ override dispatch CharSequence performInit(GenFeatureValueSpec it, GenCommonBase diagramElement, String instanceVar,
+ GenClass instanceClass, List<Integer> counters) '''
+ «IF it.value.provider.getLanguage() == GenLanguage::LITERAL_LITERAL»
+ «xptMetaModel.modifyFeature(feature, instanceVar, instanceClass, value.body)»
+ «extraLineBreak»
+ «ELSE»
+ «var expressionVarName = getVariableName('value', counters)»
+ Object «expressionVarName» = «evaluateExpr(value.provider, diagramElement, it, instanceVar)»;
+ «IF feature.listType»
+ if («expressionVarName» instanceof java.util.Collection) {
+ «xptMetaModel.getFeatureValue(feature, instanceVar, instanceClass, true)».clear();
+ «IF feature.typeGenClassifier.expressionResultNeedsCast()»
+ for (java.util.Iterator it = ((java.util.Collection) «expressionVarName»).iterator(); it.hasNext(); ) {
+ Object next = «xptAbstractExpression.qualifiedClassName(diagramElement.getDiagram())».performCast(it.next(), «xptMetaModel.
+ MetaClass(feature.typeGenClassifier)»);
+ «xptMetaModel.getFeatureValue(feature, instanceVar, instanceClass, true)».add((«xptMetaModel.
+ QualifiedClassName(feature.typeGenClassifier/*XXX sorta hack, better would be MM::setFeatureValue that supports lists*/)») next);
+ }
+ «ELSE»
+ «xptMetaModel.getFeatureValue(feature, instanceVar, instanceClass, true)».addAll(((java.util.Collection) «expressionVarName»));
+ «ENDIF»
+ } else if(«expressionVarName» != null) {
+ «IF feature.typeGenClassifier.expressionResultNeedsCast()»
+ «expressionVarName» = «xptAbstractExpression
+ .qualifiedClassName(diagramElement.getDiagram())».performCast(«expressionVarName», «xptMetaModel.MetaClass(
+ feature.typeGenClassifier)»);
+ «ENDIF»
+ «xptMetaModel.getFeatureValue(feature, instanceVar, instanceClass, true)».add((«xptMetaModel.
+ QualifiedClassName(feature.typeGenClassifier/*XXX sorta hack, better would be MM::setFeatureValue that supports lists*/)») «expressionVarName»);
+ }
+ «ELSE»
+ if(«expressionVarName» != null) {
+ «IF feature.typeGenClassifier.expressionResultNeedsCast()»
+ «extraLineBreak»
+ «expressionVarName» = «
+ xptAbstractExpression.qualifiedClassName(diagramElement.getDiagram())».performCast(«expressionVarName», «xptMetaModel.MetaClass(
+ feature.typeGenClassifier)»);
+ «ENDIF»
+ «xptMetaModel.setFeatureValue(feature, instanceVar, instanceClass, expressionVarName, true)»;
+ }
+ «ENDIF/*isListType*/»
+ «ENDIF/*is literal expression*/»
+ '''
}

Back to the top