diff options
Diffstat (limited to 'extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org')
29 files changed, 337 insertions, 293 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/Constants.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/Constants.mtl index 2aea121b9e5..32c94e672bb 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/Constants.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/Constants.mtl @@ -2,35 +2,35 @@ [module Constants('http://www.eclipse.org/uml2/4.0.0/UML')] -[template public includeHFile(dummy : Element)] +[template public constIncludeHFile(dummy : Element)] // include associated header file [/template] -[template public IncludeHeaderStart(dummy : Element)] +[template public constIncludeHeaderStart(dummy : Element)] // Include from Include stereotype (header) [/template] -[template public IncludePreBodyStart(dummy : Element)] +[template public constIncludePreBodyStart(dummy : Element)] // Include from Include stereotype (pre-body) [/template] -[template public IncludePreBodyEnd(dummy : Element)] +[template public constIncludePreBodyEnd(dummy : Element)] // End of Include stereotype (pre-body) [/template] -[template public IncludeBodyStart(dummy : Element)] +[template public constIncludeBodyStart(dummy : Element)] // Include from Include declaration (body) [/template] -[template public IncludeHeaderEnd(dummy : Element)] +[template public constIncludeHeaderEnd(dummy : Element)] // End of Include stereotype (header) [/template] -[template public IncludeBodyEnd(dummy : Element)] +[template public constIncludeBodyEnd(dummy : Element)] // End of Include stereotype (body) [/template] -[template public derivedIncludes(dummy : Element)] +[template public constDerivedIncludes(dummy : Element)] // Derived includes directives [/template] @@ -38,7 +38,7 @@ // forward declarations [/template] -[template public staticAttributes(dummy : Element)] +[template public constStaticAttributes(dummy : Element)] // static attributes (if any) [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindBody.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindBody.mtl index da720a05838..a5c2d6f9a17 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindBody.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindBody.mtl @@ -1,7 +1,7 @@ [module CppBindBody('http://www.eclipse.org/uml2/4.0.0/UML')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::utils::ClassUtils/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::IncludeUtils/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::CppIncludeUtils/] [import org::eclipse::papyrus::cpp::codegen::preferences::CppCodeGenUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppTemplates/] @@ -15,23 +15,24 @@ [class.name/] template binding body ************************************************************/ -[IncludePreBody()/] +[CppIncludePreBody()/] -[includeHFile()/] -#include <[_package.getFullPath()/][class.name/].[getHeaderSuffix()/]> +[constIncludeHFile()/] +#include <[_package.getFullPath()/]/[class.name/].[getHeaderSuffix()/]> -[IncludeBody()/] +[CppIncludeBody()/] [openNS()/] -[derivedIncludes()/] +[constDerivedIncludes()/] [CppClassAllIncludesDeclaration()/] /************************************************************/ [let tb : TemplateBinding = getTemplateBindings()] -[let templateElement : Classifier = tb.target->asSequence()->first()] -template class [templateElement.name/] <[for (tb.parameterSubstitution)][CppTemplateBindingParameter()/][/for]> [class.name/]; +[let templateElement : Element = tb.target->asSequence()->first()] +template class [templateElement.owner.oclAsType(NamedElement).name/]<[for (tb.parameterSubstitution)][CppTemplateBindingParameter()/][/for]>; [/let][/let] + [closeNS()/] /************************************************************ diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindHeader.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindHeader.mtl index 99148264afc..3277519319a 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindHeader.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppBindHeader.mtl @@ -3,6 +3,7 @@ [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassIncludeClassDeclaration/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppTemplates/] [import org::eclipse::papyrus::cpp::codegen::preferences::CppCodeGenUtils/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::CppIncludeUtils/] [template public CppBindHeader(class : Class)] @@ -17,15 +18,15 @@ [CppClassAllIncludesDeclaration()/] -[getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include).header/] +[CppIncludeHeader()/] [let tb : TemplateBinding = getTemplateBindings()] -[let templateElement : Classifier = tb.target->asSequence()->first()] +[let templateElement : Element = tb.target->asSequence()->first()] #include <[_package.getFullPath()/]/[templateElement.owner.oclAsType(NamedElement).name/].[getHeaderSuffix()/]> [openNS()/] /************************************************************/ -typedef [templateElement.name/] <[for (tb.parameterSubstitution)][CppTemplateBindingParameter()/][/for]> [class.name/]; +typedef [templateElement.owner.oclAsType(NamedElement).name/]<[for (tb.parameterSubstitution)][CppTemplateBindingParameter()/][/for]> [class.name/]; [closeNS()/] [/let][/let] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassBody.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassBody.mtl index cf2e1f70034..cf80c016c20 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassBody.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassBody.mtl @@ -2,36 +2,38 @@ [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::utils::ClassUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::IncludeUtils/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::CppIncludeUtils/] [import org::eclipse::papyrus::cpp::codegen::preferences::CppCodeGenUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassIncludeClassDeclaration/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassOperationsImplementation/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::util::property::CppAttributeImplementation/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppAttribute/] [template public CppClassBody(class : Classifier)] -#define [getFullName()/]_BODY
-
-/************************************************************
- [class.name/] class body
- ************************************************************/
-
-[IncludePreBody()/]
-
-[includeHFile()/]
-#include <[_package.getFullPath()/]/[class.name/].[getHeaderSuffix()/]>
-
-[IncludeBody()/]
-
-[derivedIncludes()/]
-[CppClassAllIncludesDeclaration()/]
-
-[openNS(class)/]
-[CppStaticAttributes(class)/]
-[CppClassOperationsImplementation(false)/]
-[closeNS(class)/]
-
-/************************************************************
- End of [class.name/] class body
- ************************************************************/
+#define [getFullName()/]_BODY + +/************************************************************ + [class.name/] class body + ************************************************************/ + +[CppIncludePreBody()/] + +[constIncludeHFile()/] +#include <[_package.getFullPath()/]/[class.name/].[getHeaderSuffix()/]> + +[CppIncludeBody()/] + +[constDerivedIncludes()/] +[CppClassAllIncludesDeclarationBody()/] + +[openNS(class)/] +[CppStaticAttributes(class)/] +[if not isTemplate()] +[CppClassOperationsImplementation(false)/] +[/if] +[closeNS(class)/] + +/************************************************************ + End of [class.name/] class body + ************************************************************/ [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassHeader.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassHeader.mtl index 54920cec07c..16288f40778 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassHeader.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppClassHeader.mtl @@ -2,7 +2,7 @@ [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::utils::ClassUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::IncludeUtils/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::CppIncludeUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassIncludeClassDeclaration/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassTypeAndEnum/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassFriendDeclaration/] @@ -40,55 +40,55 @@ in C++ 011/] [template public CppClassHeader(class : Classifier)] -#ifndef [getFullNameUC()/]_H
-#define [getFullNameUC()/]_H
-
-/************************************************************
- [class.name/] class header
- ************************************************************/
-
-[_package.CppOwnerPackageIncludeDeclaration()/]
-
-[CppClassAllIncludesDeclaration()/]
- -[IncludeHeader()/]
- -[openNS()/]
-[_package.CppClassTypeAndEnumPackage()/]
-/************************************************************/
+#ifndef [getFullNameUC()/]_H +#define [getFullNameUC()/]_H + +/************************************************************ + [class.name/] class header + ************************************************************/ + +[_package.CppOwnerPackageIncludeDeclaration()/] + +[CppClassAllIncludesDeclaration()/] + +[CppIncludeHeader()/] + +[openNS()/] + +/************************************************************/ [CppElementDoc()/] -[templateSignature()/][classUnionOrStruct()/] [class.name/][CppClassInheritedDeclarations()/] {
-[CppClassIncludeFriendDeclaration()/][CppClassTypeAndEnum()/]
-
- public:
-[defaultInitializer()/][CppClassAttributesDeclaration(VisibilityKind::public)/][CppClassOperationsDeclaration(VisibilityKind::public)/]
-
- protected:
-[CppClassAttributesDeclaration(VisibilityKind::protected)/][CppClassOperationsDeclaration(VisibilityKind::protected)/]
-
- private:
-[CppClassAttributesDeclaration(VisibilityKind::private)/][CppClassOperationsDeclaration(VisibilityKind::private)/]
-
-};
-/************************************************************/
-/* External declarations (package visibility) */
-[CppClassAttributesDeclaration(VisibilityKind::_package)/]
-[CppClassOperationsDeclaration(VisibilityKind::_package)/]
+[templateSignature()/][classUnionOrStruct()/] [class.name/][CppClassInheritedDeclarations()/] { +[CppClassIncludeFriendDeclaration()/][CppClassTypeAndEnum()/] + + public: +[defaultInitializer()/][CppClassAttributesDeclaration(VisibilityKind::public)/][CppClassOperationsDeclaration(VisibilityKind::public)/] + + protected: +[CppClassAttributesDeclaration(VisibilityKind::protected)/][CppClassOperationsDeclaration(VisibilityKind::protected)/] + + private: +[CppClassAttributesDeclaration(VisibilityKind::private)/][CppClassOperationsDeclaration(VisibilityKind::private)/] + +}; +/************************************************************/ +/* External declarations (package visibility) */ +[CppClassAttributesDeclaration(VisibilityKind::_package)/] +[CppClassOperationsDeclaration(VisibilityKind::_package)/] /************************************************************/ -[if (isTemplate())] +[if isTemplate()] /************************************************************/ /* Template functions */ [CppClassOperationsImplementation(false)/] [/if] -
-/* Inline functions */
-[CppClassOperationsImplementation(true)/]
-[closeNS()/]
-
-/************************************************************
- End of [class.name/] class header
- ************************************************************/
-
-#endif
+ +/* Inline functions */ +[CppClassOperationsImplementation(true)/] +[closeNS()/] + +/************************************************************ + End of [class.name/] class header + ************************************************************/ + +#endif [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppIncludeUtils.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppIncludeUtils.mtl new file mode 100644 index 00000000000..e2b71dc69de --- /dev/null +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppIncludeUtils.mtl @@ -0,0 +1,34 @@ +[comment encoding = UTF-8 /] +[module CppIncludeUtils('http://www.eclipse.org/uml2/4.0.0/UML')] +[import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] + +[template public CppIncludeHeader(ne : NamedElement)] +[if (hasStereotype(C_Cpp::Include))] +[let header : String = getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include).header] +[if (header <> null) and (header.size() > 0)] +[constIncludeHeaderStart()/] +[header.cleanCR()/] +[constIncludeHeaderEnd()/] +[/if][/let][/if] +[/template] + +[template public CppIncludeBody(ne : NamedElement)] +[if (hasStereotype(C_Cpp::Include))] +[let _body : String = getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include)._body] +[if (_body <> null) and (_body.size() > 0)] +[constIncludeBodyStart()/] +[_body.cleanCR()/] +[constIncludeBodyEnd()/] +[/if][/let][/if] +[/template] + +[template public CppIncludePreBody(ne : NamedElement)] +[if (hasStereotype(C_Cpp::Include))] +[let preBody : String = getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include).preBody] +[if (preBody <> null) and (preBody.size() > 0)] +[constIncludePreBodyStart()/] +[preBody.cleanCR()/] +[constIncludePreBodyEnd()/] +[/if][/let][/if] +[/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppPackageHeader.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppPackageHeader.mtl index 95a0f6b8e65..a52674ea982 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppPackageHeader.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/CppPackageHeader.mtl @@ -2,7 +2,7 @@ [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::preferences::CppCodeGenUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::IncludeUtils/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::CppIncludeUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassIncludeClassDeclaration/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassTypeAndEnum/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassFriendDeclaration/] @@ -12,41 +12,41 @@ [template public CppPackageHeader(pkg : Package)] -#ifndef PKG_[getFullNameUC()/]
-#define PKG_[getFullNameUC()/]
-
-/************************************************************
- Pkg_[name/] package header
- ************************************************************/
-
-[nestingPackage.CppOwnerPackageIncludeDeclaration()/]
-
-#ifndef _IN_
-#define _IN_
-#endif
-#ifndef _OUT_
-#define _OUT_
-#endif
-#ifndef _INOUT_
-#define _INOUT_
-#endif
-
-
-/* Package dependency header include */
-[for (getUsedPackages())]
-#include <[getFullPath()/]/Pkg_[name/].[getHeaderSuffix()/]>
-[/for]
-
-[IncludeHeader()/]
-
-[openNS()/]
+#ifndef PKG_[getFullNameUC()/] +#define PKG_[getFullNameUC()/] + +/************************************************************ + Pkg_[name/] package header + ************************************************************/ + +[nestingPackage.CppOwnerPackageIncludeDeclaration()/] + +#ifndef _IN_ +#define _IN_ +#endif +#ifndef _OUT_ +#define _OUT_ +#endif +#ifndef _INOUT_ +#define _INOUT_ +#endif + + +/* Package dependency header include */ +[for (getUsedPackages())] +#include <[getFullPath()/]/Pkg_[name/].[getHeaderSuffix()/]> +[/for] + +[CppIncludeHeader()/] + +[openNS()/] [packageTypes()/] -[CppClassTypeAndEnumPackage()/]
-[closeNS()/]
-
-/************************************************************
- End of Pkg_[name/] package header
- ************************************************************/
-
-#endif
+[CppClassTypeAndEnumPackage()/] +[closeNS()/] + +/************************************************************ + End of Pkg_[name/] package header + ************************************************************/ + +#endif [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/IncludeUtils.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/IncludeUtils.mtl deleted file mode 100644 index cd81da94794..00000000000 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/IncludeUtils.mtl +++ /dev/null @@ -1,28 +0,0 @@ -[comment encoding = UTF-8 /] -[module IncludeUtils('http://www.eclipse.org/uml2/4.0.0/UML')] -[import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] - -[template public IncludeHeader(ne : NamedElement)] -[if (hasStereotype(C_Cpp::Include) and (getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include).header.size() > 0))] -[IncludeHeaderStart()/] -[getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include).header/] -[IncludeHeaderEnd()/] -[/if] -[/template] - -[template public IncludeBody(ne : NamedElement)] -[if (hasStereotype(C_Cpp::Include) and (getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include)._body <> null))] -[IncludeBodyStart()/] -[getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include)._body/] -[IncludeBodyEnd()/] -[/if] -[/template] - -[template public IncludePreBody(ne : NamedElement)] -[if (hasStereotype(C_Cpp::Include))] -[IncludePreBodyStart()/] -[getApplication(C_Cpp::Include).oclAsType(C_Cpp::Include).preBody/] -[IncludePreBodyEnd()/] -[/if] -[/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/property/CppAttributeImplementation.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppAttribute.mtl index 57aae8be4d8..5c7d14b36ab 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/property/CppAttributeImplementation.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppAttribute.mtl @@ -1,35 +1,47 @@ -[module CppAttributeImplementation('http://www.eclipse.org/uml2/4.0.0/UML')/] +[module CppAttribute('http://www.eclipse.org/uml2/4.0.0/UML')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::utils::Modifier/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::Constants/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppDocumentation/] -[comment -// for static implementation: -// If attribute is aggregation then generate a pointer - if (GenUtils.isAggregation(currentAttribute)) { - // attributeName = "(*"+attributeName+")"; // this produce a pointer on a tab - isAgg = "*"; // this produce a tab of pointers - } -/] +[template public defaultValue(attribute : Property)] +[if (defaultValue <> null) and isStatic] = [attribute.defaultValue.stringValue()/][/if] +[/template] + + +[template public staticValue(attribute : Property)] +[if (attribute.isStatic)]static [/if] +[/template] + + +[template public CppAttributeDeclaration(attribute : Property)] +[CppElementDoc()/] +[staticValue()/][modConst()/][attribute.type.qualifiedName()/][modPtr()/][modRef()/] [attribute.name/][modArray()/]; +[/template] + [template public CppAttributeImplementation(attribute : Property)] [CppElementDoc()/] - [modConst()/][attribute.type.qualifiedName()/][modPtr()/][modRef()/] [attribute.name/][modArray()/];
+ [modConst()/][attribute.type.qualifiedName()/][modPtr()/][modRef()/] [attribute.name/][modArray()/]; [/template] [template public CppStaticAttributeImplementation(attribute : Property)] - [CppElementDoc()/] - [type.qualifiedName()/][modPtr()/][modRef()/][attribute.class.name/]::[attribute.name/][modArray()/]; +[CppElementDoc()/] +[type.qualifiedName()/][modPtr()/][modRef()/] [attribute.class.name/]::[attribute.name/][modArray()/][defaultValue()/]; [/template] + [comment Loop over attributes. Check that the attribute is not a static const. Constant static attributes are declared within the class declaration/] [template public CppStaticAttributes(classifier : Classifier)] +[constStaticAttributes()/] [for (classifier.attribute)] [if(isStatic and (not hasStereotype(C_Cpp::Const)))] - [CppStaticAttributeImplementation()/] +[CppStaticAttributeImplementation()/] + [/if] [/for] [/template] + diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppDocumentation.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppDocumentation.mtl index 644096558af..f5bb7f53e53 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppDocumentation.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppDocumentation.mtl @@ -3,8 +3,8 @@ [template public CppElementDoc(argument : Element)] -/**
- * [getComments().replaceAll('\n', '\n * ')/]
+/** + * [getComments().replaceAll('\n', '\n * ')/] */ [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppEnumerations.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppEnumerations.mtl index 97f7653d5c2..75f027b6d16 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppEnumerations.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppEnumerations.mtl @@ -1,14 +1,14 @@ -[module CppEnumerations('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppEnumerations('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppDocumentation/] [template public CppEnumerationDefinition(enum : Enumeration)] [CppElementDoc()/] enum [enum.name/] { -[for (ownedLiteral)]/ +[for (ownedLiteral)] [CppElementDoc()/] - [name/][if hasStereotype(CppInit)] = [getApplication(CppInit).oclAsType(CppInit).value/][/if],
-[/for]
-};
-
+ [name/][if hasStereotype(CppInit)] = [getApplication(CppInit).oclAsType(CppInit).value/][/if], +[/for] +}; + [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppPrimitiveTypes.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppPrimitiveTypes.mtl index 28072961454..e8adc6eb5c6 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppPrimitiveTypes.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppPrimitiveTypes.mtl @@ -1,4 +1,4 @@ -[module CppPrimitiveTypes('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppPrimitiveTypes('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppDocumentation/] @@ -25,5 +25,5 @@ typedef [getApplication(Typedef).oclAsType(Typedef).definition.replaceAll('typeN /][if (not getApplication(Typedef).oclAsType(Typedef).definition.contains('typeName'))] [primitiveType.name/][/if]; [else] [getStdtypes(primitiveType)/]; -[/if]
+[/if] [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppTemplates.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppTemplates.mtl index 0cb88942a45..d7c7786cc02 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppTemplates.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/CppTemplates.mtl @@ -17,10 +17,22 @@ endif [template public templateSignature(class : Classifier)] [if isTemplate()] -template<[for (getTemplateParameters()) separator(', ')][getType()/][/for]> [/if] +template<[for (getTemplateParameters()) separator(', ')][getType()/][/for]> +[/if] +[/template] + + +[template public templateShortSignature(class : Classifier)] +[if isTemplate()] +<[for (getTemplateParameters()) separator(', ')][getName()/][/for]> [/if] [/template] [template public templateSignature(operation : Operation)] [owner.oclAsType(Classifier).templateSignature()/] +[/template] + + +[template public templateShortSignature(operation : Operation)] +[owner.oclAsType(Classifier).templateShortSignature()/] [/template]
\ No newline at end of file diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassAttributesDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassAttributesDeclaration.mtl index 0b184a07bc2..b3e0089002a 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassAttributesDeclaration.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassAttributesDeclaration.mtl @@ -1,6 +1,6 @@ [module CppClassAttributesDeclaration('http://www.eclipse.org/uml2/4.0.0/UML')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::util::property::CppAttributeDeclaration/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppAttribute/] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassFriendDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassFriendDeclaration.mtl index 8477e8483dc..8b7b07755d8 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassFriendDeclaration.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassFriendDeclaration.mtl @@ -3,7 +3,7 @@ [template public CppClassFriendDeclaration(friend : Classifier)] -friend class [friend.qualifiedName()/];
+friend class [friend.qualifiedName()/]; [/template] [template public CppClassIncludeFriendDeclaration(class : Classifier)] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeClassDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeClassDeclaration.mtl index 8db26305532..c2e57b0864c 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeClassDeclaration.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeClassDeclaration.mtl @@ -1,13 +1,13 @@ -[module CppClassIncludeClassDeclaration('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppClassIncludeClassDeclaration('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::utils::ClassUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::clazz::CppClassIncludeDeclaration/] [comment USED??? /] [template public CppClassIncludeClassDeclarationTemplate(class : Class)] -[openNS()/]
-[if hasStereotype(class, 'CppTemplate.class')]template [/if]class [class.name/];
-[closeNS()/]
+[openNS()/] +[if hasStereotype(class, 'CppTemplate.class')]template [/if]class [class.name/]; +[closeNS()/] [/template] @@ -21,7 +21,15 @@ [template public CppClassAllIncludesDeclaration(class : Classifier)] -[for (cl : Classifier | includedClassifiers())] +[CppClassAllIncludesDeclaration(includedClassifiers())/] +[/template] + +[template public CppClassAllIncludesDeclarationBody(class : Classifier)] +[CppClassAllIncludesDeclaration(getDependencies())/] +[/template] + +[template public CppClassAllIncludesDeclaration(class : Classifier, list : Sequence(Classifier) )] +[for (cl : Classifier | list)] [comment Only add include if this is not for the current class and if it does not have the stereotype "CppNoCodeGen", unless it has stereotype "CppExternalClass"/] [if((cl <> class) and (not hasStereotype(NoCodeGen)) or hasStereotype(ExternClass))] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeDeclaration.mtl index 9634496107a..6086e5d1951 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeDeclaration.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassIncludeDeclaration.mtl @@ -1,4 +1,4 @@ -[module CppClassIncludeDeclaration('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppClassIncludeDeclaration('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::preferences::CppCodeGenUtils/] @@ -8,12 +8,14 @@ if (hasStereotype(Template)) then getApplication(Template).oclAsType(Template).declaration else if (hasStereotype(ExternClass)) then getApplication(ExternClass).oclAsType(ExternClass).name - else ne.name + '.' + getHeaderSuffix() + else + -- standard case (no stereotypes are applied) + getNearestPackage().getFullPath() + '/' + ne.name + '.' + getHeaderSuffix() endif endif /] [comment TODO: original code did not use nearest package, if stereotype CppRoot was applied/] [template public CppClassIncludeDeclaration(ne : NamedElement)] -#include <[getNearestPackage().getFullPath()/]/[ne.includeName()/]>
+#include <[ne.includeName()/]> [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassInheritedDeclarations.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassInheritedDeclarations.mtl index 22eb62b8de0..bc74fb1d96d 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassInheritedDeclarations.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassInheritedDeclarations.mtl @@ -1,4 +1,4 @@ -[module CppClassInheritedDeclarations('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppClassInheritedDeclarations('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [comment diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsDeclaration.mtl index e15580adddf..fc53a585cb6 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsDeclaration.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsDeclaration.mtl @@ -1,6 +1,6 @@ [module CppClassOperationsDeclaration('http://www.eclipse.org/uml2/4.0.0/UML')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::util::operation::CppOperationDeclaration/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::util::operation::CppOperations/] [template public CppClassOperationsDeclaration(class : Classifier, visibilityFilter : VisibilityKind)] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsImplementation.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsImplementation.mtl index aeaf01f3fe6..c39be30ad8d 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsImplementation.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassOperationsImplementation.mtl @@ -1,6 +1,6 @@ -[module CppClassOperationsImplementation('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppClassOperationsImplementation('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::util::operation::CppOperationDeclaration/] +[import org::eclipse::papyrus::cpp::codegen::acceleo::util::operation::CppOperations/] [comment implementations of a classifier, parameter controls whether only inline (or only not inline) operations diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassTypeAndEnum.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassTypeAndEnum.mtl index 50f2a7c4928..aabc4832534 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassTypeAndEnum.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/clazz/CppClassTypeAndEnum.mtl @@ -1,4 +1,4 @@ -[module CppClassTypeAndEnum('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1')/] +[module CppClassTypeAndEnum('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppPrimitiveTypes/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppEnumerations/] @@ -20,7 +20,7 @@ protected: [TypesAndEnumsForVisibility(VisibilityKind::protected)/] private: - [TypesAndEnumsForVisibility(VisibilityKind::private)/]
+ [TypesAndEnumsForVisibility(VisibilityKind::private)/] [/template] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppOperationDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppOperations.mtl index f37e2687c9d..81c80bce0db 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppOperationDeclaration.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppOperations.mtl @@ -1,4 +1,4 @@ -[module CppOperationDeclaration('http://www.eclipse.org/uml2/4.0.0/UML', 'http://papyrus/C_CppProfile/1', 'http://www.eclipse.org/uml2/4.0.0/UML/Profile/L2')/] +[module CppOperations('http://www.eclipse.org/uml2/4.0.0/UML', 'http://www.eclipse.org/papyrus/C_Cpp/1', 'http://www.eclipse.org/uml2/4.0.0/UML/Profile/L2')/] [import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] [import org::eclipse::papyrus::cpp::codegen::utils::Modifier/] [import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppDocumentation/] @@ -17,25 +17,22 @@ [query public ConsDestructorOrVoid(operation : Operation) : String = -if (hasStereotype(l2::Create)) then +if hasStereotype(l2::Create) or hasStereotype(l2::Destroy) then '' else - if (hasStereotype(l2::Destroy)) then - '~' - else - 'void ' - endif -endif -/] + 'void ' +endif/] -[template public CppReturnSpec(operation : Operation)] -[modConst()/][if (type = null)][ConsDestructorOrVoid()/][else][type.qualifiedName()/] [/if][returnResult().modPtr()/][returnResult().modRef()/] -[/template] - +[query public destructor(operation : Operation) : String = +if hasStereotype(l2::Destroy) then + '~' +else + '' +endif/] -[template public CppConstOp(operation : Operation)] -[if (hasStereotype(operation, 'Const'))] const[/if] +[template public CppReturnSpec(operation : Operation)] +[if (type = null)][ConsDestructorOrVoid()/][else][returnResult().modConst()/] [type.qualifiedName()/] [/if][returnResult().modPtr()/][returnResult().modRef()/] [/template] @@ -49,8 +46,8 @@ endif [/template] [template public CppOperationDeclaration(operation : Operation)] -[CppOperationDoc()/]
-[InlineTxt()/][virtualTxt()/][staticTxt()/][CppReturnSpec()/] [operation.name/]([CppOperationParameters()/])[CppConstOp()/][virtualSuffix()/];
+[CppOperationDoc()/] +[InlineTxt()/][virtualTxt()/][staticTxt()/][CppReturnSpec()/] [destructor()/][operation.name/]([CppOperationParameters(true)/])[modConst()/][virtualSuffix()/]; [/template] @@ -68,11 +65,11 @@ endif [template public CppOperationImplementation(operation : Operation)] [CppOperationDoc()/] [if (operation.name = 'main')] -[CppReturnSpec()/][operation.name/]([CppOperationParameters()/]) { +[CppReturnSpec()/][operation.name/]([CppOperationParameters(false)/]) { [getBody('C/C++')/] } [else] -[templateSignature()/][InlineTxt()/][CppReturnSpec()/][operation.class.name/]::[operation.name/]([CppOperationParameters()/])[CppConstOp()/][CppConstInit()/] { +[templateSignature()/][InlineTxt()/][CppReturnSpec()/][operation.class.name/][templateShortSignature()/]::[destructor()/][operation.name/]([CppOperationParameters(false)/])[modConst()/][CppConstInit()/] { [getBodyInTemplate('C/C++')/] } [/if] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppParameter.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppParameter.mtl index 5b5e08e92ca..bf013aa089f 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppParameter.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/operation/CppParameter.mtl @@ -8,11 +8,13 @@ [if (hasStereotype(C_Cpp::Default))] = [getApplication(C_Cpp::Default).oclAsType(C_Cpp::Default).value/][/if] [/template] -[template public CppParameter(parameter : Parameter)] -[modConst()/][parameter.type.qualifiedName()/][modPtr()/][modRef()/] [parameter.name/][modArray()/][defaultValue()/] +[comment C++ parameter. Default values are added, if parameter showDefault is true (implementation signature + may not repeat default value)/] +[template public CppParameter(parameter : Parameter, showDefault : Boolean)] +[modConst()/][parameter.type.qualifiedName()/][modPtr()/][modRef()/] [parameter.name/][modArray()/][if (showDefault)][defaultValue()/][/if] [/template] -[template public CppOperationParameters(operation : Operation)] -[for (ownedParameter->select(direction <> ParameterDirectionKind::return)) separator(', ')][CppParameter()/][/for] +[template public CppOperationParameters(operation : Operation, showDefault : Boolean)] +[for (ownedParameter->select(direction <> ParameterDirectionKind::return)) separator(', ')][CppParameter(showDefault)/][/for] [/template]
\ No newline at end of file diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/property/CppAttributeDeclaration.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/property/CppAttributeDeclaration.mtl deleted file mode 100644 index 9a22ee68143..00000000000 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/acceleo/util/property/CppAttributeDeclaration.mtl +++ /dev/null @@ -1,21 +0,0 @@ -[module CppAttributeDeclaration('http://www.eclipse.org/uml2/4.0.0/UML')/] -[import org::eclipse::papyrus::cpp::codegen::utils::GenUtils/] -[import org::eclipse::papyrus::cpp::codegen::utils::Modifier/] -[import org::eclipse::papyrus::cpp::codegen::acceleo::util::CppDocumentation/] - - - - -[template public defaultValue(attribute : Property)] -[if (defaultValue <> null) and isStatic] = [attribute.defaultValue.stringValue()/][/if] -[/template] - -[template public staticValue(attribute : Property)] -[if (attribute.isStatic)]static [/if] -[/template] - -[template public CppAttributeDeclaration(attribute : Property)]
-[CppElementDoc()/]
-[staticValue()/][modConst()/][attribute.type.qualifiedName()/][modPtr()/][modRef()/] [attribute.name/][modArray()/][defaultValue()/]; -[/template] - diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/transformation/CppModelElementsCreator.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/transformation/CppModelElementsCreator.java index 7eb3b2ad5d8..c2fdc6c21c7 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/transformation/CppModelElementsCreator.java +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/transformation/CppModelElementsCreator.java @@ -15,6 +15,12 @@ import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.papyrus.C_Cpp.CppRoot;
+import org.eclipse.papyrus.C_Cpp.ExternClass;
+import org.eclipse.papyrus.C_Cpp.Include;
+import org.eclipse.papyrus.C_Cpp.ManualGeneration;
+import org.eclipse.papyrus.C_Cpp.NoCodeGen;
+import org.eclipse.papyrus.C_Cpp.Template;
import org.eclipse.papyrus.acceleo.AcceleoDriver;
import org.eclipse.papyrus.acceleo.ModelElementsCreator;
import org.eclipse.papyrus.cpp.codegen.preferences.CppCodeGenUtils;
@@ -26,13 +32,6 @@ import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Namespace;
import org.eclipse.uml2.uml.Package;
-import C_Cpp.CppRoot;
-import C_Cpp.ExternClass;
-import C_Cpp.Include;
-import C_Cpp.ManualGeneration;
-import C_Cpp.NoCodeGen;
-import C_Cpp.Template;
-
/**
@@ -120,6 +119,7 @@ public class CppModelElementsCreator extends ModelElementsCreator { // Template Bound Class
if(GenUtils.isTemplateBoundElement(classifier)) {
+ // TODO: Acceleo template is only defined for class (not for all classifiers)
String fileContent = commentHeader + AcceleoDriver.evaluateURI(CppBindHeader, classifier);
createFile(container, classifier.getName() + "." + hppExt, fileContent, true);
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ClassUtils.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ClassUtils.java index 301851b5be8..2937137eff4 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ClassUtils.java +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ClassUtils.java @@ -13,11 +13,10 @@ package org.eclipse.papyrus.cpp.codegen.utils; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.UniqueEList; +import org.eclipse.papyrus.C_Cpp.Include; import org.eclipse.uml2.uml.Class; import org.eclipse.uml2.uml.Classifier; -import C_Cpp.Include; - /** * A set of utility functions related to classes. * diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.java index 262f936116c..22f8be68f2b 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.java +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.java @@ -20,6 +20,10 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.UniqueEList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; +import org.eclipse.papyrus.C_Cpp.ExternClass; +import org.eclipse.papyrus.C_Cpp.NoCodeGen; +import org.eclipse.papyrus.C_Cpp.Typedef; +import org.eclipse.papyrus.C_Cpp.Visibility; import org.eclipse.papyrus.cpp.codegen.Constants; import org.eclipse.uml2.uml.AggregationKind; import org.eclipse.uml2.uml.Behavior; @@ -52,11 +56,6 @@ import org.eclipse.uml2.uml.TemplateParameter; import org.eclipse.uml2.uml.TemplateSignature; import org.eclipse.uml2.uml.Type; -import C_Cpp.ExternClass; -import C_Cpp.NoCodeGen; -import C_Cpp.Typedef; -import C_Cpp.Visibility; - /** @@ -88,14 +87,19 @@ public class GenUtils { return binding; } + /** + * Check whether the passed classifier has a template binding with itself as bound element + * + * @param cl + * @return + */ public static boolean isTemplateBoundElement(Classifier cl) { boolean result = false; - EList<TemplateBinding> tb = cl.getTemplateBindings(); - if(tb != null) { - Iterator<TemplateBinding> itb = tb.iterator(); - while(itb.hasNext()) { - TemplateBinding currentTb = itb.next(); - result = currentTb.getBoundElement() == cl; + EList<TemplateBinding> tbs = cl.getTemplateBindings(); + if(tbs.size() > 0) { + for (TemplateBinding tb : tbs) { + // TODO: will only work for single element in template binding list + result = tb.getBoundElement() == cl; } } return result; @@ -525,7 +529,7 @@ public class GenUtils { String commentText = ""; for(Comment comment : element.getOwnedComments()) { // remove eventual CRs (avoid confusion in Acceleo template which adds " *" after line breaks) - commentText += comment.getBody().replace("\r", ""); + commentText += cleanCR(comment.getBody()); } return commentText; } @@ -735,8 +739,8 @@ public class GenUtils { for(String language : ob.getLanguages()) { String body = bodies.next(); if(language.equals(selectedLanguage)) { - // additional "\r" confuse Acceleo - return body.replace("\r", ""); + // additional "\r" confuses Acceleo + return cleanCR(body); } } } @@ -745,6 +749,15 @@ public class GenUtils { } /** + * Remove <CR> from a String. These confuse Acceleo's indentation + * @param str + * @return + */ + public static String cleanCR(String str) { + return str.replace("\r", ""); + } + + /** * Return the C++ visibility (on generalizations) in text form. Return public, if no stereotype * visibility exists * diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.mtl b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.mtl index c0bc93115e4..9393cad7538 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.mtl +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/GenUtils.mtl @@ -52,7 +52,7 @@ [query public getComments(arg0 : Element) : String = invoke('org.eclipse.papyrus.cpp.codegen.utils.GenUtils', 'getComments(org.eclipse.uml2.uml.Element)', Sequence{arg0}) /] -[query public getDependencies(arg0 : Classifier) : Sequence(Dependency) +[query public getDependencies(arg0 : Classifier) : Sequence(Classifier) = invoke('org.eclipse.papyrus.cpp.codegen.utils.GenUtils', 'getDependencies(org.eclipse.uml2.uml.Classifier)', Sequence{arg0}) /] [query public setStereotype(arg0 : Element, arg1 : String, arg2 : Boolean) : OclVoid @@ -102,3 +102,6 @@ [query public getUsedClassifiers(arg0 : Classifier) : Sequence(Classifier) = invoke('org.eclipse.papyrus.cpp.codegen.utils.GenUtils', 'getUsedClassifiers(org.eclipse.uml2.uml.Classifier)', Sequence{arg0}) /] + +[query public cleanCR(arg0 : String) : String + = invoke('org.eclipse.papyrus.cpp.codegen.utils.GenUtils', 'cleanCR(java.lang.String)', Sequence{arg0}) /] diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Modifier.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Modifier.java index c9579d7aead..0120620a565 100644 --- a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Modifier.java +++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/Modifier.java @@ -11,19 +11,19 @@ package org.eclipse.papyrus.cpp.codegen.utils; +import org.eclipse.papyrus.C_Cpp.Array; +import org.eclipse.papyrus.C_Cpp.Const; +import org.eclipse.papyrus.C_Cpp.Ptr; +import org.eclipse.papyrus.C_Cpp.Ref; import org.eclipse.papyrus.cpp.codegen.preferences.CppCodeGenUtils; import org.eclipse.uml2.uml.AggregationKind; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.MultiplicityElement; +import org.eclipse.uml2.uml.Operation; import org.eclipse.uml2.uml.Parameter; import org.eclipse.uml2.uml.ParameterDirectionKind; import org.eclipse.uml2.uml.Property; -import C_Cpp.Array; -import C_Cpp.Const; -import C_Cpp.Ptr; -import C_Cpp.Ref; - /** * Utility functions managing the "modifier" of an element, i.e. additional information whether a passed @@ -65,66 +65,73 @@ public class Modifier { /** * Create instance and initialize the ptr/ref/array/isConst attributes. * - * @param propertyOrParameter + * @param propertyOperationOrParameter */ - public static void update(Element propertyOrParameter) { + public static void update(Element propertyOperationOrParameter) { // Pointer - Ptr cppPtr = GenUtils.getApplication(propertyOrParameter, Ptr.class); + Ptr cppPtr = GenUtils.getApplication(propertyOperationOrParameter, Ptr.class); if(cppPtr != null) { - ptr = (cppPtr.getDeclaration() != null) ? cppPtr.getDeclaration() : "*"; + ptr = (cppPtr.getDeclaration() != null) ? cppPtr.getDeclaration() : "*"; //$NON-NLS-1$ } else { - ptr = ""; + ptr = ""; //$NON-NLS-1$ } - if (propertyOrParameter instanceof Property) { - if (((Property) propertyOrParameter).getAggregation() == AggregationKind.SHARED_LITERAL) { - ptr += "*"; + if (propertyOperationOrParameter instanceof Property) { + if (((Property) propertyOperationOrParameter).getAggregation() == AggregationKind.SHARED_LITERAL) { + ptr += "*"; //$NON-NLS-1$ } } // Ref - ref = GenUtils.hasStereotype(propertyOrParameter, Ref.class) ? "&" : ""; - boolean ptrOrRef = GenUtils.hasStereotype(propertyOrParameter, Ref.class) || - GenUtils.hasStereotype(propertyOrParameter, Ptr.class); + ref = GenUtils.hasStereotype(propertyOperationOrParameter, Ref.class) ? "&" : ""; //$NON-NLS-1$ //$NON-NLS-2$ + boolean ptrOrRef = GenUtils.hasStereotype(propertyOperationOrParameter, Ref.class) || + GenUtils.hasStereotype(propertyOperationOrParameter, Ptr.class); // Array - Array cppArray = GenUtils.getApplication(propertyOrParameter, Array.class); + Array cppArray = GenUtils.getApplication(propertyOperationOrParameter, Array.class); if(cppArray != null) { // explicit array definition - array = (cppArray.getDefinition() != null) ? cppArray.getDefinition() : "[]"; + array = (cppArray.getDefinition() != null) ? cppArray.getDefinition() : "[]"; //$NON-NLS-1$ } else { // calculate array from multiplicity definition int multiplicity = 1; - if(propertyOrParameter instanceof MultiplicityElement) { - multiplicity = ((MultiplicityElement)propertyOrParameter).getUpper(); + if(propertyOperationOrParameter instanceof MultiplicityElement) { + multiplicity = ((MultiplicityElement)propertyOperationOrParameter).getUpper(); } - array = ""; + array = ""; //$NON-NLS-1$ if(multiplicity == -1) { - ptr += "*"; + ptr += "*"; //$NON-NLS-1$ } else if(multiplicity > 1) { - array = "[" + multiplicity + "]"; + array = "[" + multiplicity + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } } // out an inout parameter are realized by means of a pointer - if(propertyOrParameter instanceof Parameter) { - ParameterDirectionKind directionKind = ((Parameter)propertyOrParameter).getDirection(); + if(propertyOperationOrParameter instanceof Parameter) { + ParameterDirectionKind directionKind = ((Parameter)propertyOperationOrParameter).getDirection(); if(directionKind == ParameterDirectionKind.IN_LITERAL) { - ptr += " _IN_"; + ptr += " _IN_"; //$NON-NLS-1$ } else if(directionKind == ParameterDirectionKind.OUT_LITERAL) { - ptr += " _OUT_"; + ptr += " _OUT_"; //$NON-NLS-1$ if(!ptrOrRef) { ptr += CppCodeGenUtils.getOutInoutOp(); } } else if(directionKind == ParameterDirectionKind.INOUT_LITERAL) { - ptr += " _INOUT_"; + ptr += " _INOUT_"; //$NON-NLS-1$ if(!ptrOrRef) { ptr += CppCodeGenUtils.getOutInoutOp(); } } } // Const - isConst = GenUtils.hasStereotype(propertyOrParameter, Const.class) ? "const " : ""; + if (GenUtils.hasStereotype(propertyOperationOrParameter, Const.class)) { + isConst = (propertyOperationOrParameter instanceof Operation) ? + " const" : // added at the end of operation, prefix with " " //$NON-NLS-1$ + "const "; // before operation or parameter, postfix with " " //$NON-NLS-1$ + } + else { + isConst = ""; //$NON-NLS-1$ + } } } |