diff options
author | Christian W. Damus | 2014-07-25 02:58:00 +0000 |
---|---|---|
committer | Christian W. Damus | 2014-07-25 02:58:58 +0000 |
commit | c1c9a9e24dbd08f55073fd7c35d025f96a30ec88 (patch) | |
tree | d3b3b84b0231337a9ef70e21377d02e04479b78f /plugins/developer/org.eclipse.papyrus.def/xtend | |
parent | 143014ab408abddd23f7b0e99551bda3fcd85978 (diff) | |
download | org.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.xtend | 64 |
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*/» + ''' } |