summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Eidsness2014-04-24 09:01:17 (EDT)
committerAndrew Eidsness2014-05-21 22:13:30 (EDT)
commit54a174626a47932e46a3da3d445ad0a6d570c2e7 (patch)
tree9908eac74a80d592877bdc344165d79c684d3091
parent591bd57b8694a950b1afb6862c250291c97a3e11 (diff)
downloadorg.eclipse.papyrus-54a174626a47932e46a3da3d445ad0a6d570c2e7.zip
org.eclipse.papyrus-54a174626a47932e46a3da3d445ad0a6d570c2e7.tar.gz
org.eclipse.papyrus-54a174626a47932e46a3da3d445ad0a6d570c2e7.tar.bz2
Bug 433550: Automated Test Suite for C++ codegenrefs/changes/95/25595/5
This is a test suite to confirm basic functionality of the C++ code generator. The project includes a model as well as the copies of the files that are expected to be generated. The junit test case programmatically runs the generator on each element and then checks for differences from what is expected. This needs a minor change in the basic generation code so that it can be run in a headless fashion. The change causes the generator to avoid opening a confirmation dialog on error if a certain System property is set. The comparison utility makes allowances for different formatting so that the expected code is not tied to the formatter that happens to be selected in the user's workspace. If a difference is detected, then the individual junit test case is aborted. Phase 1 of the test suite (this commit) includes: 11 tests o 9 Classes (headers, bodies) o 2 namespace headers 9 class tests covering generation of: o Classes § Inheritance § Abstract § Reusability as type in other classes and operations § Default constructor o Operations § Empty and defined method bodies § ANSIC return types § Pointer and Reference parameters (in, out, inout) and return types § Different classifiers (const, volatile, extern) § Different visibilities § Virtual § Pure virtual § Operator overloading § Polymorphism § Constructor, destructor o Attributes § Default values § Static values § Const § Different storage classifiers (volatile, register, extern) § Strings § Char, double, int, void, float § ANSIC types o Includes § Include statements § Global definitions Namespace header tests covering: o Packages § Namespace headers § Folder generation Change-Id: If22a8d3e8e3788f600288c183ac225468db4926a Signed-off-by: Andrew Eidsness <eclipse@jfront.com>
-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 0000000..8a8f166
--- /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 0000000..304b424
--- /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 0000000..df2c9c8
--- /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 0000000..eacc350
--- /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 0000000..a9ce8cc
--- /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 0000000..e02f960
--- /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 0000000..427cfa5
--- /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 0000000..6fee268
--- /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 0000000..e89d702
--- /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 0000000..f681887
--- /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 0000000..2086e77
--- /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 0000000..047fb6e
--- /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 0000000..730349c
--- /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 0000000..fb742f1
--- /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 0000000..3406d22
--- /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 0000000..c39f38c
--- /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 0000000..84c89f0
--- /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 0000000..cdbc831
--- /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 0000000..e25e51c
--- /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 0000000..a7bb700
--- /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 0000000..19d9e61
--- /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 0000000..ba39ae9
--- /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 0000000..c0c966c
--- /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 0000000..194ce80
--- /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 0000000..26d3b03
--- /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 0000000..03603e8
--- /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 0000000..6fee268
--- /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 0000000..62e2045
--- /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 0000000..0392117
--- /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 0000000..18fbe05
--- /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 0000000..bf9abab
--- /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 0000000..2c1793d
--- /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 0000000..4962873
--- /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 0000000..e20a2ce
--- /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 0000000..45bf733
--- /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 0000000..41c19d3
--- /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 02f1913..9f463b7 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 570ba6a..fa0b92c 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 2844ae1..0c68b0f 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 14f733e..b204aa2 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