Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsgar Radermacher2015-07-24 14:35:01 +0000
committerAnsgar Radermacher2015-07-24 14:35:01 +0000
commitf646e30c6a7105324849736e26bcb4c5ddcbf6a1 (patch)
treeaad7ee2c0de54831e85192b027845ab7582f46c9 /extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src
parent522411f4dd42a34dd58985b3d01f53d9f75dbfcb (diff)
downloadorg.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')
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppClassOperationsDeclaration.xtend4
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/xtend/CppOperations.xtend20
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

Back to the top