Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.classpath7
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.project30
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest.launch41
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.cpp43
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.h64
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.cpp51
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.h79
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Pkg_Package1.h36
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.cpp49
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.h62
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.cpp124
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.h153
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.cpp44
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.h57
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.cpp24
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.h193
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.cpp20
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.h54
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.cpp20
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.h44
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.cpp24
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.h59
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.cpp41
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.h62
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.cpp48
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.h77
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Pkg_Package1.h36
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Pkg_CppCodegenTest.h34
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/META-INF/MANIFEST.MF26
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/build.properties16
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.di2
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.notation256
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.uml745
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/AllPapyrusCPPCodegenTests.java18
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/CppCodegenTest.java470
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/TestPlugin.java23
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java4
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java58
-rw-r--r--tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/META-INF/MANIFEST.MF3
-rw-r--r--tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/src/org/eclipse/papyrus/tests/extra/AllTests.java7
40 files changed, 3185 insertions, 19 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.classpath b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.classpath
new file mode 100644
index 00000000000..8a8f1668cdc
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.project b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.project
new file mode 100644
index 00000000000..304b424d61e
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/.project
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.cpp.codegen.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest.launch b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest.launch
new file mode 100644
index 00000000000..df2c9c8deec
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest.launch
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/CppCodegenTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.papyrus.cpp.codegen.tests.CppCodegenTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.papyrus.cpp.codegen.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -XX:MaxPermSize=192M -Xmx512m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="true"/>
+</launchConfiguration>
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.cpp
new file mode 100644
index 00000000000..eacc3508b50
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.cpp
@@ -0,0 +1,43 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Package1_Class8_BODY
+
+/************************************************************
+ Class8 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Package1/Class8.h"
+
+// Derived includes directives
+
+namespace Package1 {
+
+// static attributes (if any)
+
+/**
+ *
+ * @param iVal1 @param iVal2 @param cVal1 @param cVal2 @param this
+ */
+int Class8::operation1(int /*in*/iVal1, int /*in*/iVal2, char /*in*/cVal1,
+ char /*in*/cVal2)
+{
+
+}
+
+/**
+ *
+ * @param iVal1
+ */
+void Class8::operation1(int /*in*/iVal1)
+{
+
+}
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class8 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.h
new file mode 100644
index 00000000000..a9ce8cc797f
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class8.h
@@ -0,0 +1,64 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_PACKAGE1_CLASS8_H
+#define CPPCODEGENTEST_PACKAGE1_CLASS8_H
+
+/************************************************************
+ Class8 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Package1/Pkg_Package1.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+namespace Package1 {
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class8
+{
+
+public:
+ Class8() :
+ defaultIValue(12)
+ {
+ }
+
+ /**
+ *
+ */
+ int defaultIValue;
+
+ /**
+ *
+ * @param iVal1 @param iVal2 @param cVal1 @param cVal2 @param this
+ */
+ int operation1(int /*in*/iVal1, int /*in*/iVal2 = 2, char /*in*/cVal1,
+ char /*in*/cVal2);
+
+ /**
+ *
+ * @param iVal1
+ */
+ void operation1(int /*in*/iVal1);
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class8 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.cpp
new file mode 100644
index 00000000000..e02f960c86d
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.cpp
@@ -0,0 +1,51 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Package1_Class9_BODY
+
+/************************************************************
+ Class9 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Package1/Class9.h"
+
+// Derived includes directives
+
+namespace Package1 {
+
+// static attributes (if any)
+
+/**
+ *
+ * @param
+ */
+int Class9::volatileIntOperation()
+{
+
+}
+
+/**
+ * Should not generate the 'register' keyword as it cannot be used in method signatures.
+ * @param
+ */
+int Class9::registerOperation()
+{
+
+}
+
+/**
+ *
+ * @param
+ */
+int Class9::externOperation()
+{
+
+}
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class9 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.h
new file mode 100644
index 00000000000..427cfa5b191
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Class9.h
@@ -0,0 +1,79 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_PACKAGE1_CLASS9_H
+#define CPPCODEGENTEST_PACKAGE1_CLASS9_H
+
+/************************************************************
+ Class9 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Package1/Pkg_Package1.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+namespace Package1 {
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class9
+{
+
+public:
+ Class9() :
+ externAttribute(3)
+ {
+ }
+
+ /**
+ *
+ */
+ int volatileAttribute;
+
+ /**
+ * Should not generate 'register' keyword as 'register' only applies to properties declared within the scope of an operation.
+ */
+ int registerAttribute;
+
+ /**
+ *
+ * @param
+ */
+ int volatileIntOperation();
+
+ /**
+ * Should not generate the 'register' keyword as it cannot be used in method signatures.
+ * @param
+ */
+ int registerOperation();
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/**
+ *
+ */
+int externAttribute;
+
+/**
+ *
+ * @param
+ */
+int externOperation();
+
+/************************************************************/
+
+/* Inline functions */
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class9 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Pkg_Package1.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Pkg_Package1.h
new file mode 100644
index 00000000000..6fee268eb47
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/CppCodegenTest/Package1/Pkg_Package1.h
@@ -0,0 +1,36 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef PKG_CPPCODEGENTEST_PACKAGE1
+#define PKG_CPPCODEGENTEST_PACKAGE1
+
+/************************************************************
+ Pkg_Package1 package header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#ifndef _IN_
+#define _IN_
+#endif
+#ifndef _OUT_
+#define _OUT_
+#endif
+#ifndef _INOUT_
+#define _INOUT_
+#endif
+
+/* Package dependency header include */
+
+namespace Package1 {
+
+// Types defined within the package
+
+}// of namespace Package1
+
+/************************************************************
+ End of Pkg_Package1 package header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.cpp
new file mode 100644
index 00000000000..e89d702b3f9
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.cpp
@@ -0,0 +1,49 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class1_BODY
+
+/************************************************************
+ Class1 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class1.h"
+
+// Derived includes directives
+
+// static attributes (if any)
+
+/**
+ * Assignment operator
+ * @param cSource @param this
+ */
+Class1& Class1::operator =(const Class1 /*in*/& cSource) {
+ if (this == &cSource)
+ return *this;
+
+ iVal = cSource.iVal;
+
+ return *this;
+}
+
+/**
+ * Destructor
+ *
+ */
+Class1::~Class1() {
+
+}
+
+/**
+ * Copy constructor
+ * @param cSource
+ */
+Class1::Class1(const Class1 /*in*/& cSource) {
+ iVal = cSource.iVal;
+}
+
+/************************************************************
+ End of Class1 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.h
new file mode 100644
index 00000000000..f6818875447
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class1.h
@@ -0,0 +1,62 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS1_H
+#define CPPCODEGENTEST_CLASS1_H
+
+/************************************************************
+ Class1 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class1 {
+
+public:
+
+ /**
+ * Assignment operator
+ * @param cSource @param this
+ */
+ Class1& operator =(const Class1 /*in*/& cSource);
+
+ /**
+ * Destructor
+ *
+ */
+ ~Class1();
+
+ /**
+ * Copy constructor
+ * @param cSource
+ */
+ Class1(const Class1 /*in*/& cSource);
+
+private:
+
+ /**
+ *
+ */
+ int iVal;
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+/************************************************************
+ End of Class1 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.cpp
new file mode 100644
index 00000000000..2086e77728f
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.cpp
@@ -0,0 +1,124 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class2_BODY
+
+/************************************************************
+ Class2 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class2.h"
+
+// Derived includes directives
+
+// Include from Include declaration (body)
+#include <string.h>
+// End of Include stereotype (body)
+
+// static attributes (if any)
+
+/**
+ * Default constructor
+ *
+ */
+Class2::Class2() {
+ iVal1 = 0;
+ iVal2 = 0;
+ bVal = false;
+}
+
+/**
+ * Constructor with parameters
+ * @param newIVal1 @param newIVal2 @param newBVal
+ */
+Class2::Class2(int /*in*/newIVal1, int /*in*/newIVal2, bool /*in*/newBVal) {
+ iVal1 = newIVal1;
+ iVal2 = newIVal2;
+ bVal = newBVal;
+}
+
+/**
+ * Virtual method
+ * @param a @param b @param
+ */
+double Class2::virtualOp(double /*in*/a, double /*in*/b) {
+ return;
+}
+
+/**
+ * Static method
+ *
+ */
+void Class2::staticOp() {
+
+}
+
+/**
+ * Friend method
+ *
+ */
+void Class2::friendOp() {
+
+}
+
+/**
+ * Non-static method
+ *
+ */
+void Class2::nonStaticOp() {
+
+}
+
+/**
+ * Method with in, out, inout, return parameters
+ * @param in @param out @param inout @param ret
+ */
+int Class2::paramsOp(int /*in*/in, int /*out*/* out, int /*inout*/* inout) {
+
+}
+
+/**
+ * Void Method
+ * @param
+ */
+void Class2::voidOp() {
+
+}
+
+/**
+ *
+ * @param newIVal1
+ */
+void Class2::defaultValueOp(int /*in*/newIVal1) {
+
+}
+
+/**
+ * Virtual destructor
+ *
+ */
+Class2::~Class2() {
+
+}
+
+/**
+ *
+ * @param c1 @param
+ */
+Class1 Class2::classesOp(Class1 /*in*/c1) {
+
+}
+
+/**
+ * Const method
+ *
+ */
+void Class2::constOp() const {
+ std::cout << "I am a const method" << std::endl;
+}
+
+/************************************************************
+ End of Class2 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.h
new file mode 100644
index 00000000000..047fb6e8bb4
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class2.h
@@ -0,0 +1,153 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS2_H
+#define CPPCODEGENTEST_CLASS2_H
+
+/************************************************************
+ Class2 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+#include "CppCodegenTest/Class1.h"
+
+// Include from Include stereotype (header)
+#include <iostream>
+// End of Include stereotype (header)
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class2 {
+
+public:
+
+ /**
+ * boolean value with public visibility
+ */
+ bool publicBVal;
+
+ /**
+ * Default constructor
+ *
+ */
+ Class2();
+
+ /**
+ * Constructor with parameters
+ * @param newIVal1 @param newIVal2 @param newBVal
+ */
+ Class2(int /*in*/newIVal1, int /*in*/newIVal2, bool /*in*/newBVal);
+
+ /**
+ * Virtual method
+ * @param a @param b @param
+ */
+ virtual double virtualOp(double /*in*/a, double /*in*/b);
+
+ /**
+ * Static method
+ *
+ */
+ static void staticOp();
+
+ /**
+ * Inline method
+ * @param a @param b @param
+ */
+ inline int inlineOp(int /*in*/a, int /*in*/b);
+
+ /**
+ * Friend method
+ *
+ */
+ void friendOp();
+
+ /**
+ * Non-static method
+ *
+ */
+ void nonStaticOp();
+
+ /**
+ * Method with in, out, inout, return parameters
+ * @param in @param out @param inout @param ret
+ */
+ int paramsOp(int /*in*/in, int /*out*/* out, int /*inout*/* inout);
+
+ /**
+ * Void Method
+ * @param
+ */
+ void voidOp();
+
+ /**
+ *
+ * @param newIVal1
+ */
+ void defaultValueOp(int /*in*/newIVal1 = 0);
+
+ /**
+ * Virtual destructor
+ *
+ */
+ virtual ~Class2();
+
+ /**
+ *
+ * @param c1 @param
+ */
+ Class1 classesOp(Class1 /*in*/c1);
+
+ /**
+ * Const method
+ *
+ */
+ void constOp() const;
+
+protected:
+
+ /**
+ * int value with protected visibility
+ */
+ int protectedIVal1;
+
+private:
+
+ /**
+ * int value with private visibility
+ */
+ int privateIVal2;
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/**
+ * int value with package visibility
+ */
+int packageIVal3;
+
+/************************************************************/
+
+/* Inline functions */
+
+/**
+ * Inline method
+ * @param a @param b @param
+ */
+inline int Class2::inlineOp(int /*in*/a, int /*in*/b) {
+ return a + b;
+}
+
+/************************************************************
+ End of Class2 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.cpp
new file mode 100644
index 00000000000..730349c9c02
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.cpp
@@ -0,0 +1,44 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class3_BODY
+
+/************************************************************
+ Class3 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class3.h"
+
+// Derived includes directives
+
+// static attributes (if any)
+
+/**
+ * Inherited method overriding.
+ * @param a @param b @param
+ */
+double Class3::virtualOp(double /*in*/a, double /*in*/b) {
+ return a + b;
+}
+
+/**
+ * Inherited virtual destructor
+ *
+ */
+Class3::~Class3() {
+
+}
+
+/**
+ * Default constructor
+ *
+ */
+Class3::Class3() {
+
+}
+
+/************************************************************
+ End of Class3 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.h
new file mode 100644
index 00000000000..fb742f16899
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class3.h
@@ -0,0 +1,57 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS3_H
+#define CPPCODEGENTEST_CLASS3_H
+
+/************************************************************
+ Class3 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+#include "CppCodegenTest/Class2.h"
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class3: public Class2 {
+
+public:
+
+ /**
+ * Inherited method overriding.
+ * @param a @param b @param
+ */
+ double virtualOp(double /*in*/a, double /*in*/b);
+
+ /**
+ * Inherited virtual destructor
+ *
+ */
+ ~Class3();
+
+ /**
+ * Default constructor
+ *
+ */
+ Class3();
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+/************************************************************
+ End of Class3 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.cpp
new file mode 100644
index 00000000000..3406d22f055
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.cpp
@@ -0,0 +1,24 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class4_BODY
+
+/************************************************************
+ Class4 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class4.h"
+
+// Derived includes directives
+
+// static attributes (if any)
+/**
+ *
+ */
+char* Class4::charStringStaticInit = "Hello World";
+
+/************************************************************
+ End of Class4 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.h
new file mode 100644
index 00000000000..c39f38c764d
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class4.h
@@ -0,0 +1,193 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS4_H
+#define CPPCODEGENTEST_CLASS4_H
+
+/************************************************************
+ Class4 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "CppCodegenTest/Class3.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class4 {
+public:
+
+ /**
+ *
+ */
+ typedef char * pChar;
+
+ Class4() :
+ arrayDoubleDefault( { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }) {
+ }
+
+ /**
+ *
+ */
+ Class3* c3;
+
+ /**
+ *
+ */
+ char charVar;
+
+ /**
+ *
+ */
+ double doubleVar;
+
+ /**
+ *
+ */
+ float floatVar;
+
+ /**
+ *
+ */
+ int intVar;
+
+ /**
+ *
+ */
+ void voidVar;
+
+ /**
+ *
+ */
+ long longVar;
+
+ /**
+ *
+ */
+ long double longDoubleVar;
+
+ /**
+ *
+ */
+ short shortVar;
+
+ /**
+ *
+ */
+ unsigned int unsignedIntVar;
+
+ /**
+ *
+ */
+ unsigned short unsignedShortVar;
+
+ /**
+ *
+ */
+ unsigned char unsignedCharVar;
+
+ /**
+ *
+ */
+ unsigned long unsignedLongVar;
+
+ /**
+ *
+ */
+ bool boolVar;
+
+ /**
+ *
+ */
+ int16_t int16_tVar;
+
+ /**
+ *
+ */
+ uint16_t uint16_tVar;
+
+ /**
+ *
+ */
+ int32_t int32_tVar;
+
+ /**
+ *
+ */
+ uint32_t uint32_tVar;
+
+ /**
+ *
+ */
+ int64_t int64_tVar;
+
+ /**
+ *
+ */
+ uint64_t uint64_tVar;
+
+ /**
+ *
+ */
+ wchar_t wchar_tVar;
+
+ /**
+ *
+ */
+ int8_t int8_tVar;
+
+ /**
+ *
+ */
+ uint8_t uint8_tVar;
+
+ /**
+ *
+ */
+ ::CppCodegenTest::Class4::pChar pc;
+
+ /**
+ *
+ */
+ double arrayDoubleDefault[13];
+
+ /**
+ *
+ */
+ char arrayCharInit[11] = { 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l',
+ 'd' };
+
+ /**
+ *
+ */
+ char* charString;
+
+ /**
+ *
+ */
+ char* ptrChar;
+
+ /**
+ *
+ */
+ static char* charStringStaticInit;
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+/************************************************************
+ End of Class4 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.cpp
new file mode 100644
index 00000000000..84c89f0d548
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.cpp
@@ -0,0 +1,20 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class5_BODY
+
+/************************************************************
+ Class5 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class5.h"
+
+// Derived includes directives
+
+// static attributes (if any)
+
+/************************************************************
+ End of Class5 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.h
new file mode 100644
index 00000000000..cdbc8316b4a
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class5.h
@@ -0,0 +1,54 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS5_H
+#define CPPCODEGENTEST_CLASS5_H
+
+/************************************************************
+ Class5 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+/************************************************************/
+/**
+ * C++ Virtual Interface
+ */
+
+class Class5 {
+
+public:
+
+ /**
+ *
+ */
+ int externalProp;
+
+ /**
+ *
+ * @param iReturn
+ */
+ virtual int pureVirtualOp() = 0;
+
+ /**
+ *
+ * @param iReturn
+ */
+ virtual int* pureVirtualConstOp() = 0;
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+/************************************************************
+ End of Class5 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.cpp
new file mode 100644
index 00000000000..e25e51cf38f
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.cpp
@@ -0,0 +1,20 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class6_BODY
+
+/************************************************************
+ Class6 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class6.h"
+
+// Derived includes directives
+
+// static attributes (if any)
+
+/************************************************************
+ End of Class6 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.h
new file mode 100644
index 00000000000..a7bb70004da
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class6.h
@@ -0,0 +1,44 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS6_H
+#define CPPCODEGENTEST_CLASS6_H
+
+/************************************************************
+ Class6 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "CppCodegenTest/Class3.h"
+
+#include "CppCodegenTest/Class5.h"
+
+/************************************************************/
+/**
+ * Virtual class inheritance and class instantiation
+ */
+
+class Class6: public Class5 {
+
+public:
+
+ /**
+ *
+ */
+ Class3 class3;
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+/************************************************************
+ End of Class6 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.cpp
new file mode 100644
index 00000000000..19d9e613ad2
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.cpp
@@ -0,0 +1,24 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Class7_BODY
+
+/************************************************************
+ Class7 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Class7.h"
+
+// Derived includes directives
+
+// static attributes (if any)
+/**
+ *
+ */
+int Class7::staticProp;
+
+/************************************************************
+ End of Class7 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.h
new file mode 100644
index 00000000000..ba39ae90524
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Class7.h
@@ -0,0 +1,59 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_CLASS7_H
+#define CPPCODEGENTEST_CLASS7_H
+
+/************************************************************
+ Class7 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+// Include from Include stereotype (header)
+#define helloworld 3
+// End of Include stereotype (header)
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class7 {
+
+public:
+ Class7() :
+ defaultProp(43) {
+ }
+
+ /**
+ *
+ */
+ static int staticProp;
+
+ /**
+ *
+ */
+ int defaultProp;
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/**
+ *
+ */
+int externProp;
+
+/************************************************************/
+
+/* Inline functions */
+
+/************************************************************
+ End of Class7 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.cpp
new file mode 100644
index 00000000000..c0c966cbd99
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.cpp
@@ -0,0 +1,41 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Package1_Class8_BODY
+
+/************************************************************
+ Class8 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Package1/Class8.h"
+
+// Derived includes directives
+
+namespace Package1 {
+
+// static attributes (if any)
+
+/**
+ *
+ * @param iVal1 @param iVal2 @param cVal1 @param cVal2 @param this
+ */
+int Class8::operation1(int /*in*/iVal1, int /*in*/iVal2, char /*in*/cVal1,
+ char /*in*/cVal2) {
+
+}
+
+/**
+ *
+ * @param iVal1
+ */
+void Class8::operation1(int /*in*/iVal1) {
+
+}
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class8 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.h
new file mode 100644
index 00000000000..194ce808122
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class8.h
@@ -0,0 +1,62 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_PACKAGE1_CLASS8_H
+#define CPPCODEGENTEST_PACKAGE1_CLASS8_H
+
+/************************************************************
+ Class8 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Package1/Pkg_Package1.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+namespace Package1 {
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class8 {
+
+public:
+ Class8() :
+ defaultIValue(12) {
+ }
+
+ /**
+ *
+ */
+ int defaultIValue;
+
+ /**
+ *
+ * @param iVal1 @param iVal2 @param cVal1 @param cVal2 @param this
+ */
+ int operation1(int /*in*/iVal1, int /*in*/iVal2 = 2, char /*in*/cVal1,
+ char /*in*/cVal2);
+
+ /**
+ *
+ * @param iVal1
+ */
+ void operation1(int /*in*/iVal1);
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/************************************************************/
+
+/* Inline functions */
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class8 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.cpp b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.cpp
new file mode 100644
index 00000000000..26d3b037db4
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.cpp
@@ -0,0 +1,48 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#define CppCodegenTest_Package1_Class9_BODY
+
+/************************************************************
+ Class9 class body
+ ************************************************************/
+
+// include associated header file
+#include "CppCodegenTest/Package1/Class9.h"
+
+// Derived includes directives
+
+namespace Package1 {
+
+// static attributes (if any)
+
+/**
+ *
+ * @param
+ */
+int Class9::volatileIntOperation() {
+
+}
+
+/**
+ * Should not generate the 'register' keyword as it cannot be used in method signatures.
+ * @param
+ */
+int Class9::registerOperation() {
+
+}
+
+/**
+ *
+ * @param
+ */
+int Class9::externOperation() {
+
+}
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class9 class body
+ ************************************************************/ \ No newline at end of file
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.h
new file mode 100644
index 00000000000..03603e898f5
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Class9.h
@@ -0,0 +1,77 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef CPPCODEGENTEST_PACKAGE1_CLASS9_H
+#define CPPCODEGENTEST_PACKAGE1_CLASS9_H
+
+/************************************************************
+ Class9 class header
+ ************************************************************/
+
+#include "CppCodegenTest/Package1/Pkg_Package1.h"
+
+#include "AnsiCLibrary/Pkg_AnsiCLibrary.h"
+
+namespace Package1 {
+
+/************************************************************/
+/**
+ *
+ */
+
+class Class9 {
+
+public:
+ Class9() :
+ externAttribute(3) {
+ }
+
+ /**
+ *
+ */
+ int volatileAttribute;
+
+ /**
+ * Should not generate 'register' keyword as 'register' only applies to properties declared within the scope of an operation.
+ */
+ int registerAttribute;
+
+ /**
+ *
+ * @param
+ */
+ int volatileIntOperation();
+
+ /**
+ * Should not generate the 'register' keyword as it cannot be used in method signatures.
+ * @param
+ */
+ int registerOperation();
+
+};
+/************************************************************/
+/* External declarations (package visibility) */
+
+/**
+ *
+ */
+int externAttribute;
+
+/**
+ *
+ * @param
+ */
+int externOperation();
+
+/************************************************************/
+
+/* Inline functions */
+
+} // of namespace Package1
+
+/************************************************************
+ End of Class9 class header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Pkg_Package1.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Pkg_Package1.h
new file mode 100644
index 00000000000..6fee268eb47
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Package1/Pkg_Package1.h
@@ -0,0 +1,36 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef PKG_CPPCODEGENTEST_PACKAGE1
+#define PKG_CPPCODEGENTEST_PACKAGE1
+
+/************************************************************
+ Pkg_Package1 package header
+ ************************************************************/
+
+#include "CppCodegenTest/Pkg_CppCodegenTest.h"
+
+#ifndef _IN_
+#define _IN_
+#endif
+#ifndef _OUT_
+#define _OUT_
+#endif
+#ifndef _INOUT_
+#define _INOUT_
+#endif
+
+/* Package dependency header include */
+
+namespace Package1 {
+
+// Types defined within the package
+
+}// of namespace Package1
+
+/************************************************************
+ End of Pkg_Package1 package header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Pkg_CppCodegenTest.h b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Pkg_CppCodegenTest.h
new file mode 100644
index 00000000000..62e2045f7ef
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/ExpectedModel/Pkg_CppCodegenTest.h
@@ -0,0 +1,34 @@
+// --------------------------------------------------------
+// Code generated by Papyrus C++
+// --------------------------------------------------------
+
+#ifndef PKG_CPPCODEGENTEST
+#define PKG_CPPCODEGENTEST
+
+/************************************************************
+ Pkg_CppCodegenTest package header
+ ************************************************************/
+
+#ifndef _IN_
+#define _IN_
+#endif
+#ifndef _OUT_
+#define _OUT_
+#endif
+#ifndef _INOUT_
+#define _INOUT_
+#endif
+
+/* Package dependency header include */
+
+namespace CppCodegenTest {
+
+// Types defined within the package
+
+}// of namespace CppCodegenTest
+
+/************************************************************
+ End of Pkg_CppCodegenTest package header
+ ************************************************************/
+
+#endif
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/META-INF/MANIFEST.MF b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..03921172170
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus CPP Codegen Tests
+Bundle-SymbolicName: org.eclipse.papyrus.cpp.codegen.tests
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.junit,
+ org.eclipse.papyrus.cpp.codegen,
+ org.eclipse.papyrus.cpp.codegen.ui,
+ org.eclipse.papyrus.uml.tools,
+ org.eclipse.papyrus.infra.core,
+ org.eclipse.ui.ide,
+ org.eclipse.emf.common.ui,
+ org.eclipse.papyrus.editor,
+ org.eclipse.emf.edit,
+ org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.papyrus.infra.services.openelement,
+ org.eclipse.cdt.core,
+ org.eclipse.papyrus.acceleo,
+ org.eclipse.papyrus.infra.emf
+Bundle-Activator: org.eclipse.papyrus.cpp.codegen.tests.TestPlugin
+Bundle-ActivationPolicy: lazy
+Eclipse-BundleShape: dir
+Export-Package: org.eclipse.papyrus.cpp.codegen.tests
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/build.properties b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/build.properties
new file mode 100644
index 00000000000..18fbe051c0f
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/build.properties
@@ -0,0 +1,16 @@
+source.. = src/
+output.. = bin/
+bin.includes = .,\
+ resources/,\
+ bin/,\
+ META-INF/,\
+ ExpectedModel/,\
+ GenModelTest.launch,\
+ build.properties
+src.includes = src/,\
+ resources/,\
+ bin/,\
+ META-INF/,\
+ ExpectedModel/,\
+ GenModelTest.launch,\
+ build.properties
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.di b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.di
new file mode 100644
index 00000000000..bf9abab340f
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.notation b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.notation
new file mode 100644
index 00000000000..2c1793d1cf5
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.notation
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_t4itkMyYEeOZRP5VM5W4JQ" type="PapyrusUMLClassDiagram" name="NewDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_iERxIMyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_iERxIsyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_iERxI8yfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_iERxJMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_iERxJcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_iERxJsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iERxJ8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_iERxKMyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_iERxKcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_iERxKsyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_iERxK8yfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iERxLMyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_iESYMMyfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_iESYMcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_iESYMsyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_iESYM8yfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iESYNMyfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_x6ArECrKEeOncLSXAkfRBA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iERxIcyfEeOcyP6DQZu_Og" x="20" y="21"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kg9O8MyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kg92AMyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kg92AcyfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kg92AsyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kg92A8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kg92BMyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kg92BcyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kg92BsyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kg92B8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kg92CMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kg92CcyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kg92CsyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kg92C8yfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kg92DMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kg92DcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kg92DsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kg92D8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_0E-t0CrKEeOncLSXAkfRBA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kg9O8cyfEeOcyP6DQZu_Og" x="165" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nJzggMyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_nJ0uoMyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_nJ0uocyfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_nJ0uosyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_nJ0uo8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_nJ0upMyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nJ0upcyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_nJ0upsyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_nJ0up8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_nJ0uqMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_nJ0uqcyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nJ1VsMyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_nJ1VscyfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_nJ1VssyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_nJ1Vs8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_nJ1VtMyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nJ1VtcyfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_29UM4CrKEeOncLSXAkfRBA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nJzggcyfEeOcyP6DQZu_Og" x="305" y="24"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_oC650MyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_oC8H8MyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_oC8H8cyfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_oC8H8syfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_oC8H88yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_oC8H9MyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oC8H9cyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_oC8H9syfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_oC8H98yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_oC8H-MyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_oC8H-cyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oC8H-syfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_oC8H-8yfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_oC8H_MyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_oC8H_cyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_oC8H_syfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oC8H_8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_-j3HgCrKEeOncLSXAkfRBA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oC7g4MyfEeOcyP6DQZu_Og" x="445" y="24"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_o8Ad8MyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_o8BFAMyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_o8BFAcyfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_o8BFAsyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_o8BFA8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_o8BFBMyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o8BFBcyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_o8BFBsyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_o8BFB8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_o8BFCMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_o8BFCcyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o8BFCsyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_o8BFC8yfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_o8BFDMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_o8BFDcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_o8BFDsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o8BFD8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_hTMV0CumEeOcwILjsIdkdw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o8Ad8cyfEeOcyP6DQZu_Og" x="590" y="23"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qNfT8MyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_qNf7AMyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qNf7AcyfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qNf7AsyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qNf7A8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qNf7BMyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qNf7BcyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qNf7BsyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qNf7B8yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qNf7CMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qNf7CcyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qNf7CsyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qNf7C8yfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qNf7DMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qNf7DcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qNf7DsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qNf7D8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_OJ7A0CxUEeOcwILjsIdkdw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qNfT8cyfEeOcyP6DQZu_Og" x="21" y="139"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_sl4usMyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_sl4ussyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_sl4us8yfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_sl4utMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_sl4utcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_sl4utsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sl4ut8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_sl4uuMyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_sl4uucyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_sl4uusyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_sl4uu8yfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sl4uvMyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_sl5VwMyfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_sl5VwcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_sl5VwsyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_sl5Vw8yfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sl5VxMyfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_ZqD3YCz9EeOcwILjsIdkdw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sl4uscyfEeOcyP6DQZu_Og" x="305" y="143"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_txmT4MyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_txm68MyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_txm68cyfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_txm68syfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_txm688yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_txm69MyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_txm69cyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_txm69syfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_txm698yfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_txm6-MyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_txm6-cyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_txm6-syfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_txm6-8yfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_txm6_MyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_txm6_cyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_txm6_syfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_txm6_8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_qS9iYDEmEeOSfbt-FmCdoQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_txmT4cyfEeOcyP6DQZu_Og" x="449" y="145"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_uTijUMyfEeOcyP6DQZu_Og" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_uTijUsyfEeOcyP6DQZu_Og" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uTijU8yfEeOcyP6DQZu_Og" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uTijVMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uTijVcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uTijVsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uTijV8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uTijWMyfEeOcyP6DQZu_Og" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uTijWcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uTjKYMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uTjKYcyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uTjKYsyfEeOcyP6DQZu_Og"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uTjKY8yfEeOcyP6DQZu_Og" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uTjKZMyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uTjKZcyfEeOcyP6DQZu_Og"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uTjKZsyfEeOcyP6DQZu_Og"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uTjKZ8yfEeOcyP6DQZu_Og"/>
+ </children>
+ <element xmi:type="uml:Class" href="CppCodegenTest.uml#_jcK5MDG0EeOOEc5pE2t6oQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uTijUcyfEeOcyP6DQZu_Og" x="597" y="148"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_t5cpgMy5EeOtSda2xb0Kjw" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_t5xZoMy5EeOtSda2xb0Kjw" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_t5yAsMy5EeOtSda2xb0Kjw" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_t5yAscy5EeOtSda2xb0Kjw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t5yAssy5EeOtSda2xb0Kjw"/>
+ </children>
+ <element xmi:type="uml:Package" href="CppCodegenTest.uml#_nZ5DgDEmEeOSfbt-FmCdoQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_t5cpgcy5EeOtSda2xb0Kjw" x="22" y="253"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Wu-RgMy6EeOtSda2xb0Kjw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_WvAtwMy6EeOtSda2xb0Kjw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_WvCi8My6EeOtSda2xb0Kjw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WvCi8cy6EeOtSda2xb0Kjw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WvCi8sy6EeOtSda2xb0Kjw"/>
+ </children>
+ <element xmi:type="uml:Model" href="CppCodegenTest.uml#_1_ToYCoNEeOncLSXAkfRBA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wu-Rgcy6EeOtSda2xb0Kjw" x="253" y="255"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_t4itkcyYEeOZRP5VM5W4JQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_t4itksyYEeOZRP5VM5W4JQ">
+ <owner xmi:type="uml:Model" href="CppCodegenTest.uml#_t4hfcMyYEeOZRP5VM5W4JQ"/>
+ </styles>
+ <element xmi:type="uml:Model" href="CppCodegenTest.uml#_t4hfcMyYEeOZRP5VM5W4JQ"/>
+ <edges xmi:type="notation:Connector" xmi:id="_rssc4MyfEeOcyP6DQZu_Og" type="4001" source="_qNfT8MyfEeOcyP6DQZu_Og" target="_nJzggMyfEeOcyP6DQZu_Og">
+ <children xmi:type="notation:DecorationNode" xmi:id="_rstD8MyfEeOcyP6DQZu_Og" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rstD8cyfEeOcyP6DQZu_Og" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rstrAMyfEeOcyP6DQZu_Og" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rstrAcyfEeOcyP6DQZu_Og" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rstrAsyfEeOcyP6DQZu_Og" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rstrA8yfEeOcyP6DQZu_Og" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rsuSEMyfEeOcyP6DQZu_Og" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rsuSEcyfEeOcyP6DQZu_Og" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rsuSEsyfEeOcyP6DQZu_Og" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rsuSE8yfEeOcyP6DQZu_Og" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rsuSFMyfEeOcyP6DQZu_Og" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rsuSFcyfEeOcyP6DQZu_Og" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_rssc4cyfEeOcyP6DQZu_Og"/>
+ <element xmi:type="uml:Association" href="CppCodegenTest.uml#_YZOWUCxoEeOcwILjsIdkdw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rssc4syfEeOcyP6DQZu_Og" points="[50, -21, -234, 94]$[234, -95, -50, 20]"/>
+ </edges>
+</notation:Diagram>
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.uml b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.uml
new file mode 100644
index 00000000000..49628739a0c
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/resources/CppCodegenTest.uml
@@ -0,0 +1,745 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:C_Cpp="http://www.eclipse.org/papyrus/C_Cpp/1" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:standard="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+ <uml:Model xmi:id="_1_ToYCoNEeOncLSXAkfRBA" name="CppCodegenTest">
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_1_ToYSoNEeOncLSXAkfRBA">
+ <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+ </packageImport>
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_TaxOkCoTEeOncLSXAkfRBA">
+ <importedPackage xmi:type="uml:Model" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_DV8nkBv8EduZN5aJJITI5w"/>
+ </packageImport>
+ <packagedElement xmi:type="uml:Class" xmi:id="_x6ArECrKEeOncLSXAkfRBA" name="Class1">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_U4LD0CrbEeOncLSXAkfRBA" name="iVal" visibility="private">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_9--NUCtwEeOcwILjsIdkdw" name="Class1" specification="_fvQ-oCraEeOncLSXAkfRBA">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_XmDKUWdrEeOvh505Y4rydA" name="cSource" type="_x6ArECrKEeOncLSXAkfRBA"/>
+ <language>C/C++</language>
+ <body>
+iVal = cSource.iVal;&#xD;</body>
+ </ownedBehavior>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_KtFesCtxEeOcwILjsIdkdw" name="~Class1" specification="_b2v08CraEeOncLSXAkfRBA">
+ <language>C/C++</language>
+ <body>
+&#xD;</body>
+ </ownedBehavior>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_Q2IjdDG6EeOOEc5pE2t6oQ" name="operator =" specification="_VvvacCraEeOncLSXAkfRBA" isReentrant="false">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Xl71kGdrEeOvh505Y4rydA" name="cSource" type="_x6ArECrKEeOncLSXAkfRBA"/>
+ <language>C/C++</language>
+ <body>
+if (this == &amp;cSource)&#xD;
+ return *this;&#xD;
+&#xD;
+iVal = cSource.iVal;&#xD;
+&#xD;
+return *this;&#xD;</body>
+ </ownedBehavior>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_VvvacCraEeOncLSXAkfRBA" name="operator =" method="_Q2IjdDG6EeOOEc5pE2t6oQ">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_NDtNQCtwEeOcwILjsIdkdw" annotatedElement="_VvvacCraEeOncLSXAkfRBA">
+ <body>Assignment operator</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Xl6ncGdrEeOvh505Y4rydA" name="cSource" type="_x6ArECrKEeOncLSXAkfRBA"/>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_6tK4IGmnEeObBONB4_KErg" name="this" type="_x6ArECrKEeOncLSXAkfRBA" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_b2v08CraEeOncLSXAkfRBA" name="~Class1" method="_KtFesCtxEeOcwILjsIdkdw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_LY0YwCtwEeOcwILjsIdkdw" annotatedElement="_b2v08CraEeOncLSXAkfRBA">
+ <body>Destructor</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_fvQ-oCraEeOncLSXAkfRBA" name="Class1" method="_9--NUCtwEeOcwILjsIdkdw" isQuery="true">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_PvFOYCtwEeOcwILjsIdkdw" annotatedElement="_fvQ-oCraEeOncLSXAkfRBA">
+ <body>Copy constructor</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_XmDKUGdrEeOvh505Y4rydA" name="cSource" type="_x6ArECrKEeOncLSXAkfRBA"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_0E-t0CrKEeOncLSXAkfRBA" name="Class2">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_8hdewCt2EeOcwILjsIdkdw" name="publicBVal">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_0sh-ADHFEeOOEc5pE2t6oQ" annotatedElement="_8hdewCt2EeOcwILjsIdkdw">
+ <body>boolean value with public visibility</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_vAIV4I7PEdySGvm5GN66HA"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_NkSbsCt5EeOcwILjsIdkdw" name="protectedIVal1" visibility="protected">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_uOkcEDHFEeOOEc5pE2t6oQ" annotatedElement="_NkSbsCt5EeOcwILjsIdkdw">
+ <body>int value with protected visibility</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6uDGwCt-EeOcwILjsIdkdw" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6uDt0Ct-EeOcwILjsIdkdw" value="1"/>
+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_6uEU4Ct-EeOcwILjsIdkdw">
+ <value xsi:nil="true"/>
+ </defaultValue>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_OalxkCt5EeOcwILjsIdkdw" name="privateIVal2" visibility="private">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_tJ-ykDHFEeOOEc5pE2t6oQ" annotatedElement="_OalxkCt5EeOcwILjsIdkdw">
+ <body>int value with private visibility</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_b-QGYDHFEeOOEc5pE2t6oQ" name="packageIVal3" visibility="package">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_r7uPsDHFEeOOEc5pE2t6oQ" annotatedElement="_b-QGYDHFEeOOEc5pE2t6oQ">
+ <body>int value with package visibility</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_RB9HUCt3EeOcwILjsIdkdw" name="Class2" specification="_HV3R8Ct2EeOcwILjsIdkdw">
+ <language>C/C++</language>
+ <body>iVal1 = newIVal1;&#xD;
+iVal2 = newIVal2;&#xD;
+bVal = newBVal;</body>
+ </ownedBehavior>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_wrOJMCt5EeOcwILjsIdkdw" name="virtualOp" specification="_6QndgCt2EeOcwILjsIdkdw">
+ <language>C/C++</language>
+ <body>return;</body>
+ </ownedBehavior>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_X_ZAQCuHEeOcwILjsIdkdw" name="Class2" specification="_8h2VwCt1EeOcwILjsIdkdw">
+ <language>C/C++</language>
+ <body>iVal1 = 0;&#xD;
+iVal2 = 0;&#xD;
+bVal = false;</body>
+ </ownedBehavior>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_q-ZzYC0FEeOcwILjsIdkdw" name="inlineOp" specification="_HtC9sCuIEeOcwILjsIdkdw">
+ <language>C/C++</language>
+ <body>return a+b;</body>
+ </ownedBehavior>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_rqzpYDHGEeOOEc5pE2t6oQ" name="constOps" specification="_fGJ2ADHGEeOOEc5pE2t6oQ">
+ <language>C/C++</language>
+ <body>std::cout&lt;&lt;&quot;I am a const method&quot;&lt;&lt;std::endl;</body>
+ </ownedBehavior>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_8h2VwCt1EeOcwILjsIdkdw" name="Class2" method="_X_ZAQCuHEeOcwILjsIdkdw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_Cubz0Ct2EeOcwILjsIdkdw" annotatedElement="_8h2VwCt1EeOcwILjsIdkdw">
+ <body>Default constructor</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_HV3R8Ct2EeOcwILjsIdkdw" name="Class2" method="_RB9HUCt3EeOcwILjsIdkdw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_327CQCt2EeOcwILjsIdkdw" annotatedElement="_HV3R8Ct2EeOcwILjsIdkdw">
+ <body>Constructor with parameters</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_1ZSiMCt2EeOcwILjsIdkdw" name="newIVal1">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_f5oS8CuHEeOcwILjsIdkdw" name="newIVal2">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_mBfpECuHEeOcwILjsIdkdw" name="newBVal">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_vAIV4I7PEdySGvm5GN66HA"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_6QndgCt2EeOcwILjsIdkdw" name="virtualOp" method="_wrOJMCt5EeOcwILjsIdkdw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_6F9lUCt5EeOcwILjsIdkdw" annotatedElement="_6QndgCt2EeOcwILjsIdkdw">
+ <body>Virtual method</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_LmW-oGwgEeOUiKqqNL5BkQ" name="a">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_NOv4wGwgEeOUiKqqNL5BkQ" name="b">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_O0AmYGwgEeOUiKqqNL5BkQ" name="" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_EOE8cCuIEeOcwILjsIdkdw" name="staticOp" isStatic="true">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_dGa0YCubEeOcwILjsIdkdw" annotatedElement="_EOE8cCuIEeOcwILjsIdkdw">
+ <body>Static method</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_HtC9sCuIEeOcwILjsIdkdw" name="inlineOp" method="_q-ZzYC0FEeOcwILjsIdkdw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_edOPQCubEeOcwILjsIdkdw" annotatedElement="_HtC9sCuIEeOcwILjsIdkdw">
+ <body>Inline method</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_GXNQADHGEeOOEc5pE2t6oQ" name="a">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_IBIbMDHGEeOOEc5pE2t6oQ" name="b">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_X2lQ8DHGEeOOEc5pE2t6oQ" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_MZs6ECuIEeOcwILjsIdkdw" name="friendOp">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_gnRsACubEeOcwILjsIdkdw" annotatedElement="_MZs6ECuIEeOcwILjsIdkdw">
+ <body>Friend method</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_PbnYoCuYEeOcwILjsIdkdw" name="nonStaticOp">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_jPwxMCubEeOcwILjsIdkdw" annotatedElement="_PbnYoCuYEeOcwILjsIdkdw">
+ <body>Non-static method</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_WoYhUCuYEeOcwILjsIdkdw" name="paramsOp">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_nGVaICubEeOcwILjsIdkdw" annotatedElement="_WoYhUCuYEeOcwILjsIdkdw">
+ <body>Method with in, out, inout, return parameters</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_e2H-0CuYEeOcwILjsIdkdw" name="in">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_ghAzUCuYEeOcwILjsIdkdw" name="out" direction="out">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_iKAKYCuYEeOcwILjsIdkdw" name="inout" direction="inout">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_lPf7sCuYEeOcwILjsIdkdw" name="ret" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_C4qY8CuZEeOcwILjsIdkdw" name="voidOp">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_M-gwoDHFEeOOEc5pE2t6oQ" annotatedElement="_C4qY8CuZEeOcwILjsIdkdw">
+ <body>Void Method</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_DHEZoCufEeOcwILjsIdkdw" name="" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_8I6RgBydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_Rmpa4CuaEeOcwILjsIdkdw" name="defaultValueOp">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_ovlsYCuaEeOcwILjsIdkdw" name="newIVal1">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_ovlsYSuaEeOcwILjsIdkdw" name="DEFAULT_INT"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_Ub5CUCudEeOcwILjsIdkdw" name="~Class2">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_9HrlYDHFEeOOEc5pE2t6oQ" annotatedElement="_Ub5CUCudEeOcwILjsIdkdw">
+ <body>Virtual destructor</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_MRiIoCugEeOcwILjsIdkdw" name="classesOp">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Xd-L4CugEeOcwILjsIdkdw" name="c1" type="_x6ArECrKEeOncLSXAkfRBA"/>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_aK_y0CugEeOcwILjsIdkdw" name="" type="_x6ArECrKEeOncLSXAkfRBA" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_fGJ2ADHGEeOOEc5pE2t6oQ" name="constOp" method="_rqzpYDHGEeOOEc5pE2t6oQ">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_sz0qcDHHEeOOEc5pE2t6oQ" annotatedElement="_fGJ2ADHGEeOOEc5pE2t6oQ">
+ <body>Const method</body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_29UM4CrKEeOncLSXAkfRBA" name="Class3">
+ <generalization xmi:type="uml:Generalization" xmi:id="_EN-zoCt5EeOcwILjsIdkdw" general="_0E-t0CrKEeOncLSXAkfRBA"/>
+ <ownedBehavior xmi:type="uml:OpaqueBehavior" xmi:id="_0ekfACt5EeOcwILjsIdkdw" name="virtualOp" specification="_IoFAYCt5EeOcwILjsIdkdw">
+ <language>C/C++</language>
+ <body>return a+b;</body>
+ </ownedBehavior>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_IoFAYCt5EeOcwILjsIdkdw" name="virtualOp" method="_0ekfACt5EeOcwILjsIdkdw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_4qnosCt5EeOcwILjsIdkdw" annotatedElement="_IoFAYCt5EeOcwILjsIdkdw">
+ <body>Inherited method overriding.</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_7owzgDHJEeOOEc5pE2t6oQ" name="a">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_991NcDHJEeOOEc5pE2t6oQ" name="b">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_HsJs4DHKEeOOEc5pE2t6oQ" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_du7T8CudEeOcwILjsIdkdw" name="~Class3">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_Fr_C4CueEeOcwILjsIdkdw" annotatedElement="_du7T8CudEeOcwILjsIdkdw">
+ <body>Inherited virtual destructor</body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_1ISAACudEeOcwILjsIdkdw" name="Class3">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_JBPugCueEeOcwILjsIdkdw" annotatedElement="_1ISAACudEeOcwILjsIdkdw">
+ <body>Default constructor</body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_-j3HgCrKEeOncLSXAkfRBA" name="Class4">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_OIbRcCujEeOcwILjsIdkdw" name="c3" type="_29UM4CrKEeOncLSXAkfRBA"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_k18HwCw-EeOcwILjsIdkdw" name="charVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_qj4iACw-EeOcwILjsIdkdw" name="doubleVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_snupECw-EeOcwILjsIdkdw" name="floatVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7W3wkBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_u2rM4Cw-EeOcwILjsIdkdw" name="intVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_w4HgMCw-EeOcwILjsIdkdw" name="voidVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_8I6RgBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ystDQCw-EeOcwILjsIdkdw" name="longVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_8heigBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_1Yde4Cw-EeOcwILjsIdkdw" name="longDoubleVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_DLNPkByeEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_-XZv0Cw-EeOcwILjsIdkdw" name="shortVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_K-lFQByeEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Aj1LICw_EeOcwILjsIdkdw" name="unsignedIntVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_LTZesByeEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_UexPkCw_EeOcwILjsIdkdw" name="unsignedShortVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_V5vyUByeEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_bIofgCw_EeOcwILjsIdkdw" name="unsignedCharVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_YYWiwByeEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ddUe8Cw_EeOcwILjsIdkdw" name="unsignedLongVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_a1wZUByeEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_f2ShcCw_EeOcwILjsIdkdw" name="boolVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_vAIV4I7PEdySGvm5GN66HA"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_iRjC8Cw_EeOcwILjsIdkdw" name="int16_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_V3dAkOmJEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_k0m1kCw_EeOcwILjsIdkdw" name="uint16_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_Y3550OmJEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_n_zmQCw_EeOcwILjsIdkdw" name="int32_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_yJpD0OmJEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_vAhP8Cw_EeOcwILjsIdkdw" name="uint32_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_1q1SoOmJEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_x4xPcCw_EeOcwILjsIdkdw" name="int64_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6hHFEOmJEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_0eYm0Cw_EeOcwILjsIdkdw" name="uint64_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_8kiVYOmJEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_3ZiJUCw_EeOcwILjsIdkdw" name="wchar_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_b1zY4OmKEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_5noYkCw_EeOcwILjsIdkdw" name="int8_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_zL7x0OmKEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_8NxUYCw_EeOcwILjsIdkdw" name="uint8_tVar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_0-8nkOmKEeG_gcDHG3asaQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_1oosECxCEeOcwILjsIdkdw" name="pc" type="_lIB18CxBEeOcwILjsIdkdw"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_tJYOgCxHEeOcwILjsIdkdw" name="arrayDoubleDefault">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_6j0jABydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_AMr1MDHLEeOOEc5pE2t6oQ" value="{0,1,2,3,4,5,6,7,8,9,10,11,12}"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_CWUEUCxeEeOcwILjsIdkdw" name="arrayCharInit">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_f7m3YDECEeOSfbt-FmCdoQ" name="charString">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_NBtLYDHBEeOOEc5pE2t6oQ" name="ptrChar">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_u7S7ADHMEeOOEc5pE2t6oQ" name="charStringStaticInit" isStatic="true">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_FT8swGwdEeOUiKqqNL5BkQ" value="&quot;Hello World&quot;"/>
+ </ownedAttribute>
+ <nestedClassifier xmi:type="uml:PrimitiveType" xmi:id="_lIB18CxBEeOcwILjsIdkdw" name="pChar"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_hTMV0CumEeOcwILjsIdkdw" name="Class5" isAbstract="true">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_kJlUICumEeOcwILjsIdkdw" annotatedElement="_hTMV0CumEeOcwILjsIdkdw">
+ <body>C++ Virtual Interface</body>
+ </ownedComment>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_u_QOYCxwEeOcwILjsIdkdw" name="externalProp">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_mBTqwCumEeOcwILjsIdkdw" name="pureVirtualOp" isAbstract="true">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_OCGvICw0EeOcwILjsIdkdw" name="iReturn" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_UZnq0Cw0EeOcwILjsIdkdw" name="pureVirtualConstOp" isAbstract="true">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_jlwd0Cw0EeOcwILjsIdkdw" name="iReturn" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_OJ7A0CxUEeOcwILjsIdkdw" name="Class6">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_XOFuMGwJEeOUiKqqNL5BkQ" annotatedElement="_OJ7A0CxUEeOcwILjsIdkdw">
+ <body>Virtual class inheritance and class instantiation</body>
+ </ownedComment>
+ <generalization xmi:type="uml:Generalization" xmi:id="_ruktUCxbEeOcwILjsIdkdw" general="_hTMV0CumEeOcwILjsIdkdw"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_YZNvQCxoEeOcwILjsIdkdw" name="class3" type="_29UM4CrKEeOncLSXAkfRBA" association="_YZOWUCxoEeOcwILjsIdkdw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_YZNvQSxoEeOcwILjsIdkdw" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YZNvQixoEeOcwILjsIdkdw" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_YZOWUCxoEeOcwILjsIdkdw" name="class6_class3_1" memberEnd="_YZOWUSxoEeOcwILjsIdkdw _YZNvQCxoEeOcwILjsIdkdw">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_YZOWUSxoEeOcwILjsIdkdw" name="class6" type="_OJ7A0CxUEeOcwILjsIdkdw" association="_YZOWUCxoEeOcwILjsIdkdw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_YZOWUixoEeOcwILjsIdkdw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YZOWUyxoEeOcwILjsIdkdw" value="*"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_ZqD3YCz9EeOcwILjsIdkdw" name="Class7">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_oxYb0Cz9EeOcwILjsIdkdw" name="externProp" visibility="package">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_1oxvkCz-EeOcwILjsIdkdw" name="staticProp" isStatic="true">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_RHyasC0FEeOcwILjsIdkdw" name="defaultProp">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_m7wOYDHIEeOOEc5pE2t6oQ" name="" value="43"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_nZ5DgDEmEeOSfbt-FmCdoQ" name="Package1">
+ <packagedElement xmi:type="uml:Class" xmi:id="_qS9iYDEmEeOSfbt-FmCdoQ" name="Class8">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ncw74DEnEeOSfbt-FmCdoQ" name="defaultIValue">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_oxQ9wDE0EeOSfbt-FmCdoQ" name="INT_WORLD" value="12"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_03LAoDEpEeOSfbt-FmCdoQ" name="operation1">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_LfwXEDEqEeOSfbt-FmCdoQ" name="iVal1">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_e8_WYDErEeOSfbt-FmCdoQ" name="iVal2" effect="read">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_8dO2QDEtEeOSfbt-FmCdoQ" name="LOL" value="2"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_g_QwIDErEeOSfbt-FmCdoQ" name="cVal1" effect="update">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_mGIjUDErEeOSfbt-FmCdoQ" name="cVal2" effect="delete">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_5lVhgBydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_LjgjwDEsEeOSfbt-FmCdoQ" name="this" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ukQ7UDEtEeOSfbt-FmCdoQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ukT-oDEtEeOSfbt-FmCdoQ" value="1"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_LjgjwTEsEeOSfbt-FmCdoQ" name="INT_DEFAULT" value="42"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_18bYgDEpEeOSfbt-FmCdoQ" name="operation1">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_oEtfUGwEEeOUiKqqNL5BkQ" name="iVal1">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_jcK5MDG0EeOOEc5pE2t6oQ" name="Class9">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_mcsD4DG0EeOOEc5pE2t6oQ" name="volatileAttribute">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_nXAXEDG0EeOOEc5pE2t6oQ" name="registerAttribute">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_1om3gHx-EeOJEKG9thf66A" annotatedElement="_nXAXEDG0EeOOEc5pE2t6oQ">
+ <body>Should not generate 'register' keyword as 'register' only applies to properties declared within the scope of an operation.</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ogWkwDG0EeOOEc5pE2t6oQ" name="externAttribute" visibility="package">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_kT4K4Hx_EeOJEKG9thf66A" name="" value="3"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_qtEKQHxuEeOJEKG9thf66A" name="volatileIntOperation">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_ncNyoHxwEeOJEKG9thf66A" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_CTJY0HxxEeOJEKG9thf66A" name="registerOperation">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_93hZsHx-EeOJEKG9thf66A" annotatedElement="_CTJY0HxxEeOJEKG9thf66A">
+ <body>Should not generate the 'register' keyword as it cannot be used in method signatures.</body>
+ </ownedComment>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Fs7YEHxxEeOJEKG9thf66A" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_IX230HxyEeOJEKG9thf66A" name="externOperation" visibility="package">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Nx8h8HxyEeOJEKG9thf66A" name="" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_CS78MCoZEeOncLSXAkfRBA">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_CTHiYCoZEeOncLSXAkfRBA" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/C_Cpp/1#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://PapyrusC_Cpp_PROFILES/C_Cpp.profile.uml#_j9REUByGEduN1bTiWJ0lyw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_oCdSgGNyEeO-Le8KnWSqzQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oCxbkGNyEeO-Le8KnWSqzQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_PROFILES/Standard.profile.uml#_0"/>
+ </profileApplication>
+ </uml:Model>
+ <C_Cpp:Const xmi:id="__KZ6YCrbEeOncLSXAkfRBA"/>
+ <C_Cpp:Ref xmi:id="_DmaysCrcEeOncLSXAkfRBA"/>
+ <C_Cpp:Const xmi:id="_v3ul0CtwEeOcwILjsIdkdw"/>
+ <C_Cpp:Inline xmi:id="_JIPJUCuIEeOcwILjsIdkdw" base_operation="_HtC9sCuIEeOcwILjsIdkdw"/>
+ <C_Cpp:Friend xmi:id="_2YLpACuaEeOcwILjsIdkdw" base_operation="_MZs6ECuIEeOcwILjsIdkdw"/>
+ <C_Cpp:Virtual xmi:id="_7PMbQCuaEeOcwILjsIdkdw" base_operation="_6QndgCt2EeOcwILjsIdkdw"/>
+ <C_Cpp:Virtual xmi:id="_aQVGICudEeOcwILjsIdkdw" base_operation="_Ub5CUCudEeOcwILjsIdkdw"/>
+ <C_Cpp:Ptr xmi:id="_m8i9QCuhEeOcwILjsIdkdw" base_parameter="_aK_y0CugEeOcwILjsIdkdw" declaration=""/>
+ <C_Cpp:Ref xmi:id="_Eba2ECuiEeOcwILjsIdkdw"/>
+ <C_Cpp:Ptr xmi:id="_e6lAACujEeOcwILjsIdkdw" base_property="_OIbRcCujEeOcwILjsIdkdw"/>
+ <C_Cpp:Ptr xmi:id="_lZJuECw0EeOcwILjsIdkdw" base_parameter="_jlwd0Cw0EeOcwILjsIdkdw"/>
+ <C_Cpp:Typedef xmi:id="_sIiEQCxBEeOcwILjsIdkdw" definition="char *" base_primitivetype="_lIB18CxBEeOcwILjsIdkdw"/>
+ <C_Cpp:Array xmi:id="_1DLcUCxHEeOcwILjsIdkdw" definition="[13]" base_property="_tJYOgCxHEeOcwILjsIdkdw"/>
+ <C_Cpp:Array xmi:id="_H5buoCxeEeOcwILjsIdkdw" definition="[11]={'h','e','l','l','o',' ','w','o','r','l','d'}" base_property="_CWUEUCxeEeOcwILjsIdkdw"/>
+ <C_Cpp:NoCodeGen xmi:id="_Sp100CxsEeOcwILjsIdkdw" base_element="_YZOWUCxoEeOcwILjsIdkdw"/>
+ <C_Cpp:StorageClass xmi:id="_2hBWsCxwEeOcwILjsIdkdw" storageClass="extern" base_Property="_u_QOYCxwEeOcwILjsIdkdw"/>
+ <C_Cpp:StorageClass xmi:id="_qngP8Cz9EeOcwILjsIdkdw" storageClass="extern" base_Property="_oxYb0Cz9EeOcwILjsIdkdw"/>
+ <C_Cpp:Include xmi:id="_FXyJoC0AEeOcwILjsIdkdw" header="#define helloworld 3" base_class="_ZqD3YCz9EeOcwILjsIdkdw"/>
+ <C_Cpp:Ptr xmi:id="_FeAvgDEIEeOSfbt-FmCdoQ" base_property="_f7m3YDECEeOSfbt-FmCdoQ"/>
+ <C_Cpp:StorageClass xmi:id="_DTjhgDG1EeOOEc5pE2t6oQ" base_Property="_mcsD4DG0EeOOEc5pE2t6oQ"/>
+ <C_Cpp:StorageClass xmi:id="_Fk6gIDG1EeOOEc5pE2t6oQ" storageClass="register" base_Property="_nXAXEDG0EeOOEc5pE2t6oQ"/>
+ <C_Cpp:StorageClass xmi:id="_G0M9wDG1EeOOEc5pE2t6oQ" storageClass="extern" base_Property="_ogWkwDG0EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_Q0fksjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_Q0fkszG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_Q2IjcjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_Q2IjczG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_Q2IjdzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_Q2RtYDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d20ykDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d20ykTG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d20ylDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d20ylTG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d20ymDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d20ymTG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d2-jkjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d2-jkzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d2-jljG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d2-jlzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d3HtgjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d3HtgzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d3uKcjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d3uKczG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d3uKdjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d3uKdzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_d33UYjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_d33UYzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_etR5cjG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_etR5czG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_etR5djG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_etbDYDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_etbDYzG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_etbDZDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_etk0YDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_etk0YTG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_etk0ZDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_etk0ZTG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_etk0aDG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_etk0aTG6EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_qyxSUDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_r2KpAjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_r2KpAzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_r2KpBjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_r2KpBzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_r2KpCjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_r2KpCzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_r2UaAjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_r2UaAzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_r2UaBjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_r2UaBzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_r2dj8DG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_r2dj8TG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3FPJgjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3FPJgzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3FPJhjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3FPJhzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3FPJijG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3FY6gDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3FY6gzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3FY6hDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3FiEcDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3FiEcTG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3FiEdDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3FiEdTG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3GIhYjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3GIhYzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3GIhZjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3GIhZzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3GRrUDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3GRrUTG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3w-1MjG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3w-1MzG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3xH_IDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3xH_ITG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3xH_JDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3xH_JTG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3xRwIDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3xRwITG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_3xRwKDG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_3xRwKTG_EeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_DH4cAjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_DH4cAzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_DH4cBjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_DH4cBzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_DICNAjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_DIL-ADHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_DIL-AzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_DIL-BDHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_kqZJYjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_kqZJYzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_kqZJZjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_kqZJZzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_kqiTUjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_kqiTUzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_kqiTVjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_kqiTVzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_oPzJ0DHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_oPzJ0THAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_oPzJ1DHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_oPzJ1THAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_oP8TwDHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_oP8TwTHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_oP8TxDHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_oP8TxTHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1x9HQjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1x9HQzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1x9HRjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1x9HRzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1yG4QjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1yG4QzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1yG4RjHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1yG4RzHAEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_PQYCYjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_PQYCYzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_PQYCZjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_PQhzYDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_PQhzYzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_PQhzZDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_PQhzZzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_PQq9UDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_Qln-EjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_Qln-EzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_Qln-FjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_Qln-FzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_QlxIAjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_QlxIAzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_QlxIBjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_QlxIBzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_S_c8MTHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_S_c8MjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_S_c8NTHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_S_c8NjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_S_mtMDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_S_mtMTHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_S_mtNDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_S_mtNTHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_arc-kjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_arc-kzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_arc-ljHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_arc-lzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_armIgjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_armIgzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_armIhjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_armIhzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_fveSEjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_fvoDEDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_fvoDEzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_fvoDFDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_fvoDFzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_fvx0EDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_fvx0EzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_fvx0FDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_n_6eQjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_n_6eQzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_n_6eRjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_n_6eRzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_oADoMjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_oADoMzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_oADoNjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_oADoNzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ptr xmi:id="_pmaiADHBEeOOEc5pE2t6oQ" base_property="_NBtLYDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_pzpswjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_pzpswzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_pzpsxjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_pzpsxzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_pzzdwjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_pzzdwzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_pzzdxjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_pzzdxzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_v-NKgjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_v-WUcDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_v-WUczHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_v-WUdDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_v-WUdzHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_v-WUeDHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_v-gFcjHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_v-gFczHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1Ixx8jHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1Ixx8zHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1I674jHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1I674zHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1I675jHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1I675zHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_1JEs4DHBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_1JEs4THBEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_cqyjoDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_cqyjoTHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_cqyjpDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_cqyjpTHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_cqyjqDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_cq7tkDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_cq7tkzHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_cq7tlDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_ejACcjHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_ejACczHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_ejACdjHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_ejACdzHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_ejJMYjHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_ejJMYzHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_ejJMZjHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_ejJMZzHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_rPmQ4jHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_rPmQ4zHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_rPmQ5jHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_rPmQ5zHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_rPva0jHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_rPva0zHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_rPva1jHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_rPva1zHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_txm6oDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_txm6oTHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_txm6pDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_txm6pTHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_txm6qDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_txwroDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_txwrozHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_txwrpDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_vhye0jHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_vh7owDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_vh7owzHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_vh7oxDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_vh7oxzHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_vh7oyDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_viFZwDHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_viFZwTHCEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_V7aPojHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_V7aPozHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_V7aPpjHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_V7aPpzHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_V7jZkjHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_V7jZkzHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_V7jZljHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_V7jZlzHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_fgf6kDHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_f-HDojHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_f-HDozHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_f-HDpjHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_f-HDpzHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_f-QNkjHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_f-QNkzHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_f-QNljHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_f-QNlzHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_t4qS8jHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_t40D8DHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_t40D8zHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Ref xmi:id="_t40D9DHEEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Const xmi:id="_uj4IQDHGEeOOEc5pE2t6oQ" base_operation="_fGJ2ADHGEeOOEc5pE2t6oQ"/>
+ <C_Cpp:Include xmi:id="_fO_McDHHEeOOEc5pE2t6oQ" body="#include &lt;string.h>" header="#include &lt;iostream>" base_class="_0E-t0CrKEeOncLSXAkfRBA"/>
+ <standard:Create xmi:id="_ts_zcGNyEeO-Le8KnWSqzQ" base_BehavioralFeature="_fvQ-oCraEeOncLSXAkfRBA"/>
+ <standard:Destroy xmi:id="_ugUt0GNyEeO-Le8KnWSqzQ" base_BehavioralFeature="_b2v08CraEeOncLSXAkfRBA"/>
+ <C_Cpp:Const xmi:id="_Xl-44GdrEeOvh505Y4rydA" base_parameter="_Xl6ncGdrEeOvh505Y4rydA"/>
+ <C_Cpp:Ref xmi:id="_XmBVIGdrEeOvh505Y4rydA" base_parameter="_Xl6ncGdrEeOvh505Y4rydA"/>
+ <C_Cpp:Const xmi:id="_XmGNoGdrEeOvh505Y4rydA" base_parameter="_XmDKUGdrEeOvh505Y4rydA"/>
+ <C_Cpp:Ref xmi:id="_XmJQ8GdrEeOvh505Y4rydA" base_parameter="_XmDKUGdrEeOvh505Y4rydA"/>
+ <C_Cpp:Ref xmi:id="_8FiZQGmnEeObBONB4_KErg" base_parameter="_6tK4IGmnEeObBONB4_KErg"/>
+ <C_Cpp:Ptr xmi:id="_4rG88GwcEeOUiKqqNL5BkQ" base_property="_u7S7ADHMEeOOEc5pE2t6oQ"/>
+ <standard:Create xmi:id="_gBWuEGweEeOUiKqqNL5BkQ" base_BehavioralFeature="_1ISAACudEeOcwILjsIdkdw"/>
+ <standard:Destroy xmi:id="_gt0LcGweEeOUiKqqNL5BkQ" base_BehavioralFeature="_du7T8CudEeOcwILjsIdkdw"/>
+ <standard:Destroy xmi:id="_7DEn8GweEeOUiKqqNL5BkQ" base_BehavioralFeature="_Ub5CUCudEeOcwILjsIdkdw"/>
+ <standard:Create xmi:id="_8zGbIGweEeOUiKqqNL5BkQ" base_BehavioralFeature="_HV3R8Ct2EeOcwILjsIdkdw"/>
+ <standard:Create xmi:id="_9_6zkGweEeOUiKqqNL5BkQ" base_BehavioralFeature="_8h2VwCt1EeOcwILjsIdkdw"/>
+ <C_Cpp:StorageClass xmi:id="_pH54YHxwEeOJEKG9thf66A" base_Parameter="_ncNyoHxwEeOJEKG9thf66A"/>
+ <C_Cpp:StorageClass xmi:id="_HmN08HxxEeOJEKG9thf66A" storageClass="register" base_Parameter="_Fs7YEHxxEeOJEKG9thf66A"/>
+ <C_Cpp:StorageClass xmi:id="_PWYJIHxyEeOJEKG9thf66A" storageClass="extern" base_Parameter="_Nx8h8HxyEeOJEKG9thf66A"/>
+</xmi:XMI>
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/AllPapyrusCPPCodegenTests.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/AllPapyrusCPPCodegenTests.java
new file mode 100644
index 00000000000..e20a2ce1097
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/AllPapyrusCPPCodegenTests.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2014 Zeligsoft (2009) Limited.
+ * 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
+ */
+package org.eclipse.papyrus.cpp.codegen.tests;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({CppCodegenTest.class})
+public class AllPapyrusCPPCodegenTests {
+
+}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/CppCodegenTest.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/CppCodegenTest.java
new file mode 100644
index 00000000000..45bf7332d02
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/CppCodegenTest.java
@@ -0,0 +1,470 @@
+/*
+ * Copyright (c) 2014 Zeligsoft (2009) Limited.
+ * 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
+ */
+package org.eclipse.papyrus.cpp.codegen.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Scanner;
+
+import org.eclipse.cdt.core.CCProjectNature;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.acceleo.AcceleoDriver;
+import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.services.openelement.service.OpenElementService;
+import org.eclipse.papyrus.uml.tools.model.UmlModel;
+import org.eclipse.papyrus.uml.tools.model.UmlUtils;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
+import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider;
+import org.eclipse.ui.wizards.datatransfer.ImportOperation;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CppCodegenTest {
+ static {
+ // This system property avoids opening dialogs during Papyrus operations. It must
+ // be set before trying to load any of the Papyrus classes.
+ System.setProperty("papyrus.run-headless", Boolean.TRUE.toString());
+ }
+
+ private static final String GENERATE_COMMAND_ID = "org.eclipse.papyrus.cpp.codegen.command";
+ private static final String EDITOR_ID = "org.eclipse.papyrus.infra.core.papyrusEditor";
+
+ private static final String ModelProjectName = "project";
+ private static final String ModelName = "CppCodegenTest.uml";
+ private static final String GenProjectName = "org.eclipse.papyrus.cppgen.CppCodegenTest";
+ private static final String GenFolderName = "CppCodegenTest";
+ private static final String ModelPath = "/" + ModelProjectName + '/' + ModelName;
+
+ private static final String ExpectedGenFolderName = "ExpectedModel";
+ private static final String ExpectedGenFolderPath = "/" + ModelProjectName + '/' + ExpectedGenFolderName;
+
+ private static final String Class1_fragment = "_x6ArECrKEeOncLSXAkfRBA";
+ private static final String Class2_fragment = "_0E-t0CrKEeOncLSXAkfRBA";
+ private static final String Class3_fragment = "_29UM4CrKEeOncLSXAkfRBA";
+ private static final String Class4_fragment = "_-j3HgCrKEeOncLSXAkfRBA";
+ private static final String Class5_fragment = "_hTMV0CumEeOcwILjsIdkdw";
+ private static final String Class6_fragment = "_OJ7A0CxUEeOcwILjsIdkdw";
+ private static final String Class7_fragment = "_ZqD3YCz9EeOcwILjsIdkdw";
+ private static final String Class8_fragment = "_qS9iYDEmEeOSfbt-FmCdoQ";
+ private static final String Class9_fragment = "_jcK5MDG0EeOOEc5pE2t6oQ";
+ private static final String Package1_fragment = "_nZ5DgDEmEeOSfbt-FmCdoQ";
+ private static final String Model_fragment = "_1_ToYCoNEeOncLSXAkfRBA";
+
+ private static final IProgressMonitor npm = new NullProgressMonitor();
+
+ private static IProject modelProject;
+ private static IProject genProject;
+ private static IHandlerService handlerService;
+ private static URI modelUri;
+ private static URI genCodeUri;
+ private static IWorkbenchPage page;
+ private static PapyrusMultiDiagramEditor editor;
+ private static OpenElementService elementActivator;
+ private static UmlModel model;
+
+ @BeforeClass
+ public static void loadProject() throws Exception {
+ if (modelProject != null)
+ cleanup();
+
+ handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
+
+ // Create a project to hold the model, make sure it has C++ natures to avoid confirmation
+ // dialog during code generation.
+ modelProject = ResourcesPlugin.getWorkspace().getRoot().getProject(ModelProjectName);
+ modelProject.create(npm);
+ modelProject.open(npm);
+
+ // Import the model files from this test plugin to the runtime workbench.
+ // NOTE: This test plugin is marked for deployment as a directory (Eclipse-BundleShape
+ // header in the MANIFEST.MF file) which means we can ignore the possibility of jar
+ // files here. We just find the location of the folder in which this bundle is
+ // deployed and then use the ImportOperation to copy all of the resources folder
+ // into the new project.
+ String location = TestPlugin.getInstance().getBundle().getLocation();
+ String resourcesPath = location.replaceAll("^reference:", "") + "resources";
+ Object source = new File(java.net.URI.create(resourcesPath));
+ IImportStructureProvider structureProvider = FileSystemStructureProvider.INSTANCE;
+
+ // Import the CPP .h and .cpp files from this test plugin to the runtime workbench.
+ // NOTE: This test plugin is marked for deployment as a directory (Eclipse-BundleShape
+ // header in the MANIFEST.MF file) which means we can ignore the possibility of jar
+ // files here. We just find the location of the folder in which this bundle is
+ // deployed and then use the ImportOperation to copy all of the resources folder
+ // into the new project.
+ ImportOperation operation1
+ = new ImportOperation(
+ modelProject.getFullPath(), source, structureProvider, null,
+ structureProvider.getChildren(source));
+ operation1.setOverwriteResources(true);
+ operation1.setCreateContainerStructure(false);
+ operation1.run(npm);
+ assertTrue("import failed: " + operation1.getStatus().getMessage(), operation1.getStatus().isOK());
+
+ String expectedGenPath = location.replaceAll("^reference:", "") + ExpectedGenFolderName;
+ source = new File(java.net.URI.create(expectedGenPath));
+
+ ImportOperation operation2 = new ImportOperation(
+ modelProject.getFullPath(), source, structureProvider, null, structureProvider.getChildren(source));
+ operation2.setOverwriteResources(true);
+ operation2.setCreateContainerStructure(false);
+ operation2.run(npm);
+ assertTrue("import failed: " + operation2.getStatus().getMessage(), operation2.getStatus().isOK());
+
+ // Setup the base modelUri for convenience in the test cases.
+ modelUri = URI.createPlatformResourceURI(ModelPath, true);
+ assertNotNull(modelUri);
+
+ // Get the currently active workbench page so we can control the editor that is about
+ // to be opened.
+ page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+
+ // Load the imported model to make it ready for later operations.
+ URIEditorInput input = new URIEditorInput(modelUri);
+ editor = (PapyrusMultiDiagramEditor) page.openEditor(input, EDITOR_ID);
+ assertNotNull(editor);
+
+ model = UmlUtils.getUmlModel();
+ assertNotNull(model);
+
+ // Model elements are selected with the appropriate service.
+ elementActivator = editor.getServicesRegistry().getService(OpenElementService.class);
+ assertNotNull(elementActivator);
+
+ //Setup the base genCodeUri for convenience in the test cases.
+ genCodeUri = URI.createPlatformPluginURI(ExpectedGenFolderPath, true);
+ assertNotNull(genCodeUri);
+
+ }
+
+ @AfterClass
+ public static void cleanup() throws Exception {
+ if (modelProject == null)
+ return;
+
+ // Close the editor without saving anything. This is required in order to avoid dialogs
+ // about "do you want to save these changes" when the project is deleted.
+ if (page != null)
+ page.closeAllEditors(false);
+
+ // Now we should be able to delete the project without opening any confirmation dialogs.
+ modelProject.delete(true, true, npm);
+ modelProject = null;
+ }
+
+ @Test
+ public void testGenerateClass1() throws Exception {
+ assertGenerate(Class1_fragment);
+ assertGeneratedMatchesExpected("Class1.h");
+ assertGeneratedMatchesExpected("Class1.cpp");
+ }
+
+ @Test
+ public void testGenerateClass2() throws Exception{
+ assertGenerate(Class2_fragment);
+ assertGeneratedMatchesExpected("Class2.h");
+ assertGeneratedMatchesExpected("Class2.cpp");
+ }
+
+ @Test
+ public void testGenerateClass3() throws Exception{
+ assertGenerate(Class3_fragment);
+ assertGeneratedMatchesExpected("Class3.h");
+ assertGeneratedMatchesExpected("Class3.cpp");
+ }
+
+ @Test
+ public void testGenerateClass4() throws Exception{
+ assertGenerate(Class4_fragment);
+ assertGeneratedMatchesExpected("Class4.h");
+ assertGeneratedMatchesExpected("Class4.cpp");
+ }
+
+ @Test
+ public void testGenerateClass5() throws Exception{
+ assertGenerate(Class5_fragment);
+ assertGeneratedMatchesExpected("Class5.h");
+ assertGeneratedMatchesExpected("Class5.cpp");
+ }
+
+ @Test
+ public void testGenerateClass6() throws Exception{
+ assertGenerate(Class6_fragment);
+ assertGeneratedMatchesExpected("Class6.h");
+ assertGeneratedMatchesExpected("Class6.cpp");
+ }
+
+ @Test
+ public void testGenerateClass7() throws Exception{
+ assertGenerate(Class7_fragment);
+ assertGeneratedMatchesExpected("Class7.h");
+ assertGeneratedMatchesExpected("Class7.cpp");
+ }
+
+ @Test
+ public void testGenerateClass8() throws Exception{
+ assertGenerate(Class8_fragment);
+ assertGeneratedMatchesExpected("Class8.h", "Package1");
+ assertGeneratedMatchesExpected("Class8.cpp", "Package1");
+ }
+
+ @Test
+ public void testGenerateClass9() throws Exception{
+ assertGenerate(Class9_fragment);
+ assertGeneratedMatchesExpected("Class9.h", "Package1");
+ assertGeneratedMatchesExpected("Class9.cpp", "Package1");
+ }
+
+ @Test
+ public void testGeneratePackage1NamespaceHeader() throws Exception{
+ assertGenerate(Package1_fragment);
+ assertGeneratedMatchesExpected("Pkg_Package1.h", "Package1");
+ }
+
+
+ @Test
+ public void testGenerateModelNamespaceHeader() throws Exception{
+ assertGenerate(Model_fragment);
+ assertGeneratedMatchesExpected("Pkg_CppCodegenTest.h");
+ }
+
+ private void assertGenerate(String fragment) throws Exception {
+ selectSemanticElement(fragment);
+ handlerService.executeCommand(GENERATE_COMMAND_ID, null);
+ assertFalse("Acceleo errors occured during code generation.", AcceleoDriver.hasErrors());
+ }
+
+ private void selectSemanticElement(String uriFragment) throws Exception {
+ URI elementUri = modelUri.appendFragment(uriFragment);
+ EObject semantic = model.getResource().getResourceSet().getEObject(elementUri, true);
+
+ // #openSemanticElement returns the editor if successful and null otherwise
+
+ // the open often fails if pages are passsed in, so we first try to open without specifying
+ // pages
+ IMultiDiagramEditor editor = elementActivator.openSemanticElement(semantic);//, pages.toArray());
+ assertNotNull(editor);
+
+ // If there isn't an active editor, then we try passing in the list of pages. From observation,
+ // this is needed on the first call (first test case) but causes problems on later ones.
+ if (editor.getActiveEditor() == null) {
+ ServicesRegistry registry = (ServicesRegistry) editor.getAdapter(ServicesRegistry.class);
+ assertNotNull(registry);
+
+ IPageManager pageManager = registry.getService(IPageManager.class);
+ assertNotNull(pageManager);
+
+ List<Object> pages = pageManager.allPages();
+ assertNotNull(pages);
+ assertTrue(pages.size() > 0);
+
+ editor = elementActivator.openSemanticElement(semantic, pages.toArray());
+ assertNotNull(editor);
+ }
+
+ // make sure there is an active editor so that the selection will be available
+ assertNotNull(editor.getActiveEditor());
+ }
+
+ private static String getFileContents(IFile file) throws CoreException {
+ InputStream inStream = file.getContents();
+ assertNotNull("Contents of file \""+file.getName()+"\" are empty.", inStream);
+ String content = null;
+ Scanner s = new Scanner(inStream);
+
+ s.useDelimiter("\\Z");
+
+ content= s.hasNext() ? s.next() : "";
+ s.close();
+
+ return content;// == null ? null : content.replaceAll("\\s+", " ").trim();
+ }
+
+ private IProject getGeneratedProject()
+ {
+ if( genProject != null )
+ return genProject;
+
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(GenProjectName);
+ if( project == null
+ || ! project.exists() )
+ throw new AssertionError( "Generated project not found" );
+
+ return genProject = project;
+ }
+
+
+ /**
+ * Compare the files in folder with what we expect to see. When comparing
+ * file content, filter out whitespace which will replace all whitespace
+ * with a single space in the actual file content and the expected file
+ * content in order to avoid problems with differences caused by code
+ * formatting options where the test suite is run. Then a simple string
+ * comparison is done.
+ */
+ private void assertGeneratedMatchesExpected(String fileName, String... depthSegments) throws Exception {
+ IFolder generatedFolder = getGeneratedProject().getFolder(GenFolderName);
+ assertTrue("Default generated folder \""+GenFolderName+"\" was not generated", generatedFolder.exists());
+
+ /*TEST-GENERATED PACKAGE FOLDER*/
+ IFolder generatedPackageFolder = null;
+ for(int i = 0; i < depthSegments.length ; i++){
+ if(i==0)
+ generatedPackageFolder = generatedFolder.getFolder(depthSegments[i]);
+ else
+ generatedPackageFolder = generatedPackageFolder.getFolder(depthSegments[i]);
+ assertTrue("Package folder \""+depthSegments[i]+"\" was not generated.", generatedPackageFolder.exists());
+ }
+
+ /*TEST-GENERATED FILE*/
+ IFile generatedFile = null;
+ if(generatedPackageFolder !=null){
+ generatedFile = generatedPackageFolder.getFile(fileName);
+ }else{
+ generatedFile = generatedFolder.getFile(fileName);
+ }
+ assertTrue("File "+fileName+" was not generated.", generatedFile.exists());
+ String fileContent = getFileContents(generatedFile);
+
+
+ /*PREVIOUSLY GENERATED PACKAGE FOLDER*/
+ IFolder expectedFolder = null;
+ for(int i = 0; i < depthSegments.length ; i++){
+ if(i==0)
+ expectedFolder = modelProject.getFolder(depthSegments[i]);
+ else
+ expectedFolder = expectedFolder.getFolder(depthSegments[i]);
+ assertTrue("Package folder \""+depthSegments[i]+"\" was not generated.", expectedFolder.exists());
+ }
+
+ /*PREVIOUSLY GENERATED FILE*/
+ IFile expectedFile = null;
+ if(expectedFolder != null){
+ expectedFile = expectedFolder.getFile(fileName);
+ }else{
+ expectedFile = modelProject.getFile(fileName);
+ }
+ assertTrue("File "+fileName+" was not generated.", expectedFile.exists());
+ String expectedFileContent = getFileContents(expectedFile);
+
+ assertContentMatches(fileName, fileContent, expectedFileContent);
+ }
+
+ private static void assertContentMatches(String filename, String generated, String expected){
+ Scanner expectedScanner = new Scanner(expected);
+ char[] strippedGen = generated.replaceAll("\\s+", "").trim().toCharArray();
+ int genCharsTraversed = 0;
+ boolean outofchars = false;
+
+ /*
+ * line by line in expected
+ * char by char in generated
+ * compare char by char expected to generated until no more chars in line
+ * if not matching then print line expected against line generated by
+ * keeping track of the amount of chars traversed, then traverse the
+ * generated with white characters
+ * */
+ try {
+ int lineNumber = 1;
+ int lineCharBegin = 0;
+ for( ; !outofchars && expectedScanner.hasNextLine(); ++lineNumber){
+ lineCharBegin = genCharsTraversed;
+ String eLine = expectedScanner.nextLine();
+ String strippedELine = eLine.replaceAll("\\s+", "").trim();
+ char[] strippedExpected = strippedELine.toCharArray();
+ for(int i =0; i < strippedExpected.length; i++){
+ if(strippedExpected[i] != strippedGen[genCharsTraversed]){
+ fail(filename + ':' + lineNumber + "expected '"+ eLine.trim() + "'but found '"+ rebuildStringForLineError(generated.trim(), eLine.trim(), i, genCharsTraversed, lineCharBegin)+"'");
+ }
+ genCharsTraversed++;
+ if(genCharsTraversed == strippedGen.length){
+ outofchars = true;
+ }
+ }
+ }
+ if(expectedScanner.hasNextLine()){
+ fail(filename + ':' + lineNumber + " expected '" + expectedScanner.nextLine() + "' but found end-of-file");
+ }else if(!outofchars){
+ fail(filename + ':' + lineNumber + " expected end-of-file but found '" + rebuildStringForEndOfFileError(generated.trim(), genCharsTraversed) + '\'');
+ }
+ } finally {
+ if (expectedScanner != null)
+ expectedScanner.close();
+ }
+ }
+
+ private static String rebuildStringForLineError(String generatedString, String expectedLine, int beginInExpectedLine, int genCharsTraversed, int firstCharInExpLine){
+ String brokenLine = "";
+
+ int lengthFromFirstDiff = expectedLine.replaceAll("\\s+", "").length()-beginInExpectedLine;
+ char[] generatedChars = generatedString.replaceAll("\\s+", " ").toCharArray();
+ int nonwhitechars = 0;
+ for(int i = 0; i < generatedChars.length; i++ ){
+ if(generatedChars[i] != ' ' ){
+ nonwhitechars++;
+ }
+ if(nonwhitechars >= firstCharInExpLine && nonwhitechars <genCharsTraversed+lengthFromFirstDiff){
+ //start copying
+ brokenLine+=generatedChars[i];
+ }else if(nonwhitechars == genCharsTraversed+lengthFromFirstDiff){
+ //copy number of characters for the length of the expected line
+ if(generatedChars[i+1]!='\0'){
+ brokenLine+="...";
+ }
+ break;
+ }
+ }
+
+ return brokenLine;
+ }
+
+ private static String rebuildStringForEndOfFileError(String generatedString, int genCharsTraversed) {
+ String brokenLine = "";
+
+ char[] generatedChars = generatedString.replaceAll("\\s+", " ").toCharArray();
+ int nonwhitechars = 0;
+ for(int i = 0; i < generatedChars.length; i++ ){
+ if(generatedChars[i] != ' ' ){
+ nonwhitechars++;
+ }
+ if(nonwhitechars > genCharsTraversed && generatedChars[i]!='\0'){
+ //start copying
+ brokenLine+=generatedChars[i];
+ }else if(nonwhitechars == genCharsTraversed+15 || generatedChars[i]=='\0'){
+ //copy only 15 chars
+ if(generatedChars[i+1]!='\0'){
+ brokenLine+="...";
+ }
+ break;
+ }
+ }
+ return brokenLine;
+ }
+}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/TestPlugin.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/TestPlugin.java
new file mode 100644
index 00000000000..41c19d38637
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.tests/src/org/eclipse/papyrus/cpp/codegen/tests/TestPlugin.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2014 Zeligsoft (2009) Limited.
+ * 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
+ */
+package org.eclipse.papyrus.cpp.codegen.tests;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+public class TestPlugin extends AbstractUIPlugin {
+
+ private static TestPlugin instance;
+
+ public TestPlugin() {
+ instance = this;
+ }
+
+ public static TestPlugin getInstance() {
+ return instance;
+ }
+}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java
index 02f19132da9..9f463b7ac17 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen.ui/src/org/eclipse/papyrus/cpp/codegen/ui/handlers/GenerateCodeHandler.java
@@ -40,6 +40,8 @@ import org.eclipse.uml2.uml.PackageableElement;
*/
public class GenerateCodeHandler extends CmdHandler {
+ private static final boolean Headless = Boolean.getBoolean("papyrus.run-headless");
+
// ------------------------------------------------------------------------
// Execution
// ------------------------------------------------------------------------
@@ -128,7 +130,7 @@ public class GenerateCodeHandler extends CmdHandler {
CppModelElementsCreator mec = new CppModelElementsCreator(modelProject);
generate(mec, pe, new BasicEList<PackageableElement>(), true);
- if (AcceleoDriver.hasErrors()) {
+ if (AcceleoDriver.hasErrors() && !Headless) {
MessageDialog.openInformation(new Shell(), "Errors during code generation", //$NON-NLS-1$
"Errors occured during code generation. Please check the error log"); //$NON-NLS-1$
}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
index 570ba6a0727..fa0b92c3409 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java
@@ -30,6 +30,8 @@ import org.eclipse.uml2.uml.PackageableElement;
public class LocateCppProject {
public static final String LANGUAGE_NAME = "C++"; //$NON-NLS-1$
+ private static final boolean Headless = Boolean.getBoolean("papyrus.run-headless");
+
/**
* Locate and return the target project for the given packageable element. Return null if
* no target project can be found.
@@ -38,10 +40,10 @@ public class LocateCppProject {
* not create a new project, but may modify existing ones.
*
* @param pe a packageable element within a model
- * @param interactive if true, ask the user to apply the C++ nature if required.
+ * @param createIfMissing if true, ask the user to apply the C++ nature if required.
* @return the associated project, if the C++ nature is applied.
*/
- public static IProject getTargetProject(PackageableElement pe, boolean interactive) {
+ public static IProject getTargetProject(PackageableElement pe, boolean createIfMissing) {
// URI uri = pe.eResource().getURI();
Package rootPkg = PackageUtil.getRootPackage(pe);
@@ -57,30 +59,56 @@ public class LocateCppProject {
String projectName = prefix + rootPkg.getName();
IProject modelProject = root.getProject(projectName);
if(!modelProject.exists()) {
- boolean create = interactive && MessageDialog.openQuestion(new Shell(),
- Messages.LocateCppProject_CreateTargetProjectTitle,
- String.format(Messages.LocateCppProject_CreateTargetProjectDesc, projectName));
- if (create) {
- ILangSupport langSupport = LanguageSupport.getLangSupport(LANGUAGE_NAME);
- if (langSupport != null) {
- langSupport.resetConfigurationData();
- modelProject = langSupport.createProject(projectName, null);
+ if (Headless)
+ {
+ try
+ {
+ modelProject.create(null);
+ }
+ catch( CoreException e )
+ {
+ return null;
+ }
+ }
+ else
+ {
+ boolean create = createIfMissing && MessageDialog.openQuestion(new Shell(),
+ Messages.LocateCppProject_CreateTargetProjectTitle,
+ String.format(Messages.LocateCppProject_CreateTargetProjectDesc, projectName));
+ if (create) {
+ ILangSupport langSupport = LanguageSupport.getLangSupport(LANGUAGE_NAME);
+ if (langSupport != null) {
+ langSupport.resetConfigurationData();
+ modelProject = langSupport.createProject(projectName, null);
+ }
+ else {
+ return null;
+ }
}
else {
return null;
}
}
- else {
+ }
+
+ // Make sure the target project is open. If it was just created then it is likely open,
+ // however if it is an old project then it could have been closed.
+ if( ! modelProject.isOpen() )
+ try
+ {
+ modelProject.open( null );
+ }
+ catch( CoreException e )
+ {
return null;
}
- }
-
+
// Make sure the target project has the C and C++ build natures.
try {
if(!modelProject.hasNature(CCProjectNature.CC_NATURE_ID)) {
- boolean apply = interactive && MessageDialog.openQuestion(new Shell(),
+ boolean apply = createIfMissing && (Headless || MessageDialog.openQuestion(new Shell(),
Messages.LocateCppProject_ApplyCNatureTitle,
- Messages.LocateCppProject_ApplyCNatureDesc);
+ Messages.LocateCppProject_ApplyCNatureDesc));
if (!apply) {
return null;
}
diff --git a/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/META-INF/MANIFEST.MF b/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/META-INF/MANIFEST.MF
index 2844ae19c38..0c68b0febf2 100644
--- a/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/META-INF/MANIFEST.MF
+++ b/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.papyrus.cdo.tests;bundle-version="1.0.0",
org.eclipse.papyrus.cdo.ui.tests;bundle-version="1.0.0",
org.eclipse.papyrus.cdo.uml.ui.tests;bundle-version="1.0.0",
- org.eclipse.papyrus.cdo.validation.problems.tests;bundle-version="1.0.0"
+ org.eclipse.papyrus.cdo.validation.problems.tests;bundle-version="1.0.0",
+ org.eclipse.papyrus.cpp.codegen.tests;bundle-version="1.0.0"
Bundle-Vendor: Eclipse Modeling Project
Bundle-ActivationPolicy: lazy
Bundle-Version: 1.0.0.qualifier
diff --git a/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/src/org/eclipse/papyrus/tests/extra/AllTests.java b/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/src/org/eclipse/papyrus/tests/extra/AllTests.java
index 14f733e1eae..b204aa287e0 100644
--- a/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/src/org/eclipse/papyrus/tests/extra/AllTests.java
+++ b/tests/junit/extraplugins/org.eclipse.papyrus.tests.extra/src/org/eclipse/papyrus/tests/extra/AllTests.java
@@ -15,6 +15,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.eclipse.papyrus.cpp.codegen.tests.AllPapyrusCPPCodegenTests;
import org.eclipse.papyrus.tests.extra.launcher.ITestSuiteClass;
import org.eclipse.papyrus.tests.extra.launcher.PluginTestSuiteClass;
import org.junit.runner.RunWith;
@@ -35,6 +36,9 @@ public class AllTests {
/* CDO tests */
suiteClasses.add(new PluginTestSuiteClass(org.eclipse.papyrus.cdo.tests.AllTests.class));
+ /* CPP Codegen tests */
+ suiteClasses.add(new PluginTestSuiteClass(AllPapyrusCPPCodegenTests.class));
+
/* UML Compare tests */
/**
* UML Compare tests have been temporarily disabled. See:
@@ -47,7 +51,6 @@ public class AllTests {
// suiteClasses.add(new PluginTestSuiteClass(org.eclipse.papyrus.uml.compare.diff.tests.AllTests.class));
/* **************** plugins *********************** */
-
}
/**
@@ -59,7 +62,7 @@ public class AllTests {
* Constructor.
*
* @param clazz
- * the suite class – AllTests2
+ * the suite class � AllTests2
* @throws InitializationError
* if there's a problem
* @throws org.junit.runners.model.InitializationError

Back to the top