diff options
author | Ansgar Radermacher | 2015-07-24 14:35:01 +0000 |
---|---|---|
committer | Ansgar Radermacher | 2015-07-24 14:35:01 +0000 |
commit | f646e30c6a7105324849736e26bcb4c5ddcbf6a1 (patch) | |
tree | aad7ee2c0de54831e85192b027845ab7582f46c9 /extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src | |
parent | 522411f4dd42a34dd58985b3d01f53d9f75dbfcb (diff) | |
download | org.eclipse.papyrus-f646e30c6a7105324849736e26bcb4c5ddcbf6a1.tar.gz org.eclipse.papyrus-f646e30c6a7105324849736e26bcb4c5ddcbf6a1.tar.xz org.eclipse.papyrus-f646e30c6a7105324849736e26bcb4c5ddcbf6a1.zip |
473511 - [C++ codegen] methods corresponding to transition effects use simple name only
Diffstat (limited to 'extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src')
2 files changed, 20 insertions, 4 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppClassOperationsDeclaration.xtend b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppClassOperationsDeclaration.xtend index e907a740a30..e41bb495982 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppClassOperationsDeclaration.xtend +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppClassOperationsDeclaration.xtend @@ -28,8 +28,8 @@ class CppClassOperationsDeclaration { «FOR b : clazz.eAllContents.toList.filter(OpaqueBehavior).filter[it.visibility == visibilityFilter]» «IF b.specification == null» - // opaque behavior without specification (typically from state machine) - «CppOperations.CppBehaviorDeclaration(b)» + // opaque behavior without specification (typically from state machine) + «CppOperations.CppBehaviorDeclaration(b)» «ENDIF» «ENDFOR» ''' diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppOperations.xtend b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppOperations.xtend index b510c788a42..1082ce1be40 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppOperations.xtend +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppOperations.xtend @@ -29,6 +29,8 @@ import org.eclipse.papyrus.C_Cpp.ConstInit import org.eclipse.uml2.uml.util.UMLUtil import org.eclipse.papyrus.cpp.codegen.Constants import org.eclipse.papyrus.codegen.base.GenUtils +import org.eclipse.uml2.uml.NamedElement +import org.eclipse.uml2.uml.Region class CppOperations { static def CppOperationImplementation(Operation operation) ''' @@ -110,7 +112,7 @@ class CppOperations { static def CppBehaviorImplementation(OpaqueBehavior behavior) ''' «CppDocumentation.CppBehaviorDoc(behavior)» - «CppReturnSpec(behavior)»«behavior.context.name»::«behavior.name»(«CppParameter.CppBehaviorParameters(behavior, false)»)«Modifier.modCVQualifier(behavior)» { + «CppReturnSpec(behavior)»«behavior.context.name»::«behavior.qualifiedBehaviorName»(«CppParameter.CppBehaviorParameters(behavior, false)»)«Modifier.modCVQualifier(behavior)» { «GenUtils.getBodyFromOB(behavior, Constants.supportedLanguages)» } ''' @@ -146,6 +148,20 @@ class CppOperations { static def CppBehaviorDeclaration(Behavior behavior) ''' «CppDocumentation.CppBehaviorDoc(behavior)» - «InlineTxt(behavior)»«CppReturnSpec(behavior)»«behavior.name»(«CppParameter.CppBehaviorParameters(behavior, true)»)«Modifier.modCVQualifier(behavior)»; + «InlineTxt(behavior)»«CppReturnSpec(behavior)»«behavior.qualifiedBehaviorName»(«CppParameter.CppBehaviorParameters(behavior, true)»)«Modifier.modCVQualifier(behavior)»; ''' + + static def qualifiedBehaviorName(Behavior behavior) { + var ne = behavior as NamedElement + var name = behavior.name + while ((ne != null) && !(ne instanceof Classifier) || (ne instanceof Behavior)) { + if (ne.owner instanceof NamedElement) { + ne = ne.owner as NamedElement + } + if (ne.owner instanceof Region) { + name = ne.name + "_" + name + } + } + return name + } }
\ No newline at end of file |