From f7f824c4aee2881115ab647a76a10dab36d0c946 Mon Sep 17 00:00:00 2001 From: Kairides Date: Thu, 14 May 2020 13:59:36 +0200 Subject: [PATCH] Kermeta3 validation rule moved here from the K3 validation plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ronan Guéguen --- .../.classpath | 7 ++ .../.project | 28 ++++++ .../.settings/org.eclipse.jdt.core.prefs | 7 ++ .../META-INF/MANIFEST.MF | 13 +++ .../build.properties | 4 + .../plugin.xml | 5 + .../pom.xml | 25 +++++ .../extensions/kermeta3/Kermeta3Rule.java | 95 +++++++++++++++++++ framework/xdsml_framework/pom.xml | 3 +- 9 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.classpath create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.project create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.settings/org.eclipse.jdt.core.prefs create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/META-INF/MANIFEST.MF create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/build.properties create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/plugin.xml create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/pom.xml create mode 100644 framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/src/org/eclipse/gemoc/xdsmlframework/extensions/kermeta3/Kermeta3Rule.java diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.classpath b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.classpath new file mode 100644 index 000000000..eca7bdba8 --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.project b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.project new file mode 100644 index 000000000..b84825244 --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.project @@ -0,0 +1,28 @@ + + + org.eclipse.gemoc.xdsmlframework.extensions.kermeta3 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.settings/org.eclipse.jdt.core.prefs b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/META-INF/MANIFEST.MF b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/META-INF/MANIFEST.MF new file mode 100644 index 000000000..99338ce4c --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/META-INF/MANIFEST.MF @@ -0,0 +1,13 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Gemoc extension for Kermeta3 +Bundle-SymbolicName: org.eclipse.gemoc.xdsmlframework.extensions.kermeta3;singleton:=true +Bundle-Version: 4.0.0.qualifier +Automatic-Module-Name: org.eclipse.gemoc.xdsmlframework.extension.kermeta3 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.eclipse.core.resources, + org.eclipse.equinox.registry, + org.eclipse.gemoc.dsl;bundle-version="3.0.0", + org.eclipse.gemoc.xdsmlframework.api;bundle-version="4.0.0", + org.eclipse.jdt.core;bundle-version="3.14.0" +Export-Package: org.eclipse.gemoc.xdsmlframework.extensions.kermeta3 diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/build.properties b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/build.properties new file mode 100644 index 000000000..34d2e4d2d --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/plugin.xml b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/plugin.xml new file mode 100644 index 000000000..11eb59f39 --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/plugin.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/pom.xml b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/pom.xml new file mode 100644 index 000000000..3ed7a431e --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/pom.xml @@ -0,0 +1,25 @@ + + + + + 4.0.0 + + + ../.. + org.eclipse.gemoc.modeldebugging.xdsmlframework + org.eclipse.gemoc.modeldebugging.xdsmlframework.root + 4.0.0-SNAPSHOT + + + org.eclipse.gemoc.xdsmlframework.extensions.kermeta3 + eclipse-plugin + \ No newline at end of file diff --git a/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/src/org/eclipse/gemoc/xdsmlframework/extensions/kermeta3/Kermeta3Rule.java b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/src/org/eclipse/gemoc/xdsmlframework/extensions/kermeta3/Kermeta3Rule.java new file mode 100644 index 000000000..830f16eb2 --- /dev/null +++ b/framework/xdsml_framework/plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3/src/org/eclipse/gemoc/xdsmlframework/extensions/kermeta3/Kermeta3Rule.java @@ -0,0 +1,95 @@ +package org.eclipse.gemoc.xdsmlframework.extensions.kermeta3; + +import java.util.ArrayList; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Path; +import org.eclipse.gemoc.dsl.Dsl; +import org.eclipse.gemoc.dsl.Entry; +import org.eclipse.gemoc.xdsmlframework.api.extensions.metaprog.IRule; +import org.eclipse.gemoc.xdsmlframework.api.extensions.metaprog.Message; +import org.eclipse.gemoc.xdsmlframework.api.extensions.metaprog.Severity; +import org.eclipse.jdt.core.IAnnotation; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IMethod; +import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.JavaCore; + +public class Kermeta3Rule implements IRule{ + + boolean tagTests; + + public Kermeta3Rule(boolean performsTagTest) { + tagTests = performsTagTest; + } + + @Override + public Message execute(Dsl dsl) { + ArrayList entriesNames = new ArrayList(); + + for (Entry e : dsl.getEntries()) { + entriesNames.add(e.getKey()); + } + + if(!entriesNames.contains("k3")) { + return (new Message("Missing entry \"k3\"", Severity.ERROR)); + } + + return (new Message("",Severity.DEFAULT)); + } + + @Override + public Message execute(Entry entry) { + if("k3".matches(entry.getKey())) { + String aspectsFields = entry.getValue(); + + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IFile file = root.getFile(new Path(entry.eResource().getURI().toPlatformString(true))); + + IProject proj = file.getProject(); + IJavaProject jProj = JavaCore.create(proj); + + if(jProj == null) { + return (new Message("No project dsa in the workspace", Severity.ERROR)); + } + + ArrayList aspectsName = new ArrayList<>(); + ArrayList aspectsAnnotation = new ArrayList<>(); + + for(String s : aspectsFields.split(",")) { + aspectsName.add(s.trim()); + } + + + for(String asp : aspectsName) { + try { + IType type = jProj.findType(asp); + for(IMethod meth : type.getMethods()) { + for(IAnnotation annot : meth.getAnnotations()) { + aspectsAnnotation.add(annot.getElementName()); + } + } + } catch (Exception e) { + return (new Message("No aspect matching \""+asp+ "\" in the project", Severity.ERROR)); + } + } + + if(tagTests) { + + if(!aspectsAnnotation.contains("Main")) { + return (new Message("No method annotated with \"Main\" in the project", Severity.ERROR)); + } + + if(!aspectsAnnotation.contains("InitializeModel")) { + return (new Message("No method annotated with \"InitializeModel\" in the project", Severity.WARNING)); + } + + } + + } + return (new Message("", Severity.DEFAULT)); + } +} diff --git a/framework/xdsml_framework/pom.xml b/framework/xdsml_framework/pom.xml index 06178e2fa..6aa2d7b73 100644 --- a/framework/xdsml_framework/pom.xml +++ b/framework/xdsml_framework/pom.xml @@ -18,7 +18,8 @@ plugins/org.eclipse.gemoc.xdsmlframework.ui.utils plugins/org.eclipse.gemoc.xdsmlframework.ide.ui - plugins/org.eclipse.gemoc.xdsmlframework.extensions.sirius + plugins/org.eclipse.gemoc.xdsmlframework.extensions.sirius + plugins/org.eclipse.gemoc.xdsmlframework.extensions.kermeta3 tests/org.eclipse.gemoc.xdsmlframework.test.lib