Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsgar Radermacher2015-06-01 11:47:24 +0000
committerAnsgar Radermacher2015-06-01 11:47:24 +0000
commitf3d4bf8aeb562b708bbda2d48e13d82f03e8c863 (patch)
treeb252f8c5fef6aa58b33f5abe9a09b342e165b9f7 /extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp
parentc9f891f6fddb901a0a3da4126afc0bd64b1b0aec (diff)
downloadorg.eclipse.papyrus-f3d4bf8aeb562b708bbda2d48e13d82f03e8c863.tar.gz
org.eclipse.papyrus-f3d4bf8aeb562b708bbda2d48e13d82f03e8c863.tar.xz
org.eclipse.papyrus-f3d4bf8aeb562b708bbda2d48e13d82f03e8c863.zip
468965 - [CDT integration] Use an extension point to configure the code generator associated with the CDT editor
Diffstat (limited to 'extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp')
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/C_CppLangCodegen.java57
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ILocateCppProject.java36
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/LocateCppProject.java9
3 files changed, 97 insertions, 5 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/C_CppLangCodegen.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/C_CppLangCodegen.java
new file mode 100644
index 00000000000..44bb35702c6
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/C_CppLangCodegen.java
@@ -0,0 +1,57 @@
+package org.eclipse.papyrus.cpp.codegen;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.papyrus.codegen.base.ModelElementsCreator;
+import org.eclipse.papyrus.codegen.extensionpoints.ILangCodegen;
+import org.eclipse.papyrus.cpp.codegen.transformation.CppModelElementsCreator;
+import org.eclipse.papyrus.cpp.codegen.utils.LocateCppProject;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.PackageableElement;
+
+/**
+ * C++ language support
+ *
+ * @author ansgar
+ */
+public class C_CppLangCodegen implements ILangCodegen {
+
+ protected ModelElementsCreator creator = null;
+
+ protected IProject lastProject = null;
+
+ @Override
+ public void generateCode(IProject project, PackageableElement element, IProgressMonitor monitor)
+ {
+ manageCreator(project, element);
+ creator.createPackageableElement(element, monitor);
+ }
+
+ @Override
+ public void cleanCode(IProject project, PackageableElement element, IProgressMonitor monitor) {
+ manageCreator(project, element);
+ creator.removePackageableElement(element, monitor);
+ }
+
+ @Override
+ public String getFileName(IProject project, NamedElement element) {
+ manageCreator(project, element);
+ return creator.getFileName(element);
+ }
+
+ @Override
+ public IProject getTargetProject(PackageableElement pe, boolean createIfMissing) {
+ return LocateCppProject.getTargetProject(pe, createIfMissing);
+ }
+
+ protected void manageCreator(IProject project, Element element) {
+ if ((project == null) && (element instanceof PackageableElement)) {
+ project = getTargetProject((PackageableElement) element, false);
+ }
+ if ((creator == null) || (project != lastProject)) {
+ lastProject = project;
+ creator = new CppModelElementsCreator(project);
+ }
+ }
+}
diff --git a/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ILocateCppProject.java b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ILocateCppProject.java
new file mode 100644
index 00000000000..2cdb5d6d945
--- /dev/null
+++ b/extraplugins/codegen/org.eclipse.papyrus.cpp.codegen/src/org/eclipse/papyrus/cpp/codegen/utils/ILocateCppProject.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2006 - 2013 CEA LIST.
+ * 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
+ *
+ * Contributors:
+ * CEA LIST - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.papyrus.cpp.codegen.utils;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.uml2.uml.PackageableElement;
+
+public interface ILocateCppProject {
+
+ /**
+ * Locate and return the target project for the given packageable element. Return null if
+ * no target project can be found.
+ *
+ * Ensures that the target project is correctly setup to contain generated C/C++ code. Does
+ * not create a new project, but may modify existing ones.
+ *
+ * @param pe
+ * a packageable element within a model
+ * @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 IProject getTargetProject(PackageableElement pe, boolean createIfMissing);
+
+ public IFile getTargetFile();
+}
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 d3d1bf77c39..fb2b54209af 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
@@ -19,8 +19,8 @@ import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.papyrus.codegen.extensionpoints.ILangSupport;
-import org.eclipse.papyrus.codegen.extensionpoints.LanguageSupport;
+import org.eclipse.papyrus.codegen.extensionpoints.ILangProjectSupport;
+import org.eclipse.papyrus.codegen.extensionpoints.LanguageProjectSupport;
import org.eclipse.papyrus.cpp.codegen.Activator;
import org.eclipse.papyrus.cpp.codegen.preferences.CppCodeGenConstants;
import org.eclipse.papyrus.uml.tools.utils.PackageUtil;
@@ -78,10 +78,9 @@ public class LocateCppProject {
Messages.LocateCppProject_CreateTargetProjectTitle,
String.format(Messages.LocateCppProject_CreateTargetProjectDesc, projectName));
if (create) {
- ILangSupport langSupport = LanguageSupport.getLangSupport(LANGUAGE_NAME);
+ ILangProjectSupport langSupport = LanguageProjectSupport.getProjectSupport(LANGUAGE_NAME);
if (langSupport != null) {
- langSupport.resetConfigurationData();
- modelProject = langSupport.createProject(projectName, null);
+ modelProject = langSupport.createProject(projectName);
if (modelProject == null) {
return null;
}

Back to the top