From 178b944014a988b9c221cb2c10fb1f0154857546 Mon Sep 17 00:00:00 2001 From: Erwan Bousse Date: Tue, 1 Apr 2014 10:53:52 +0200 Subject: [PATCH] Beggining maveninsation --- External Plug-in Libraries/.classpath | 6 - External Plug-in Libraries/.gitignore | 1 + External Plug-in Libraries/.searchable | 2 +- .../META-INF/MANIFEST.MF | 2 +- .../pom.xml | 38 +++ .../pom.xml~ | 38 +++ .../META-INF/MANIFEST.MF | 6 +- .../generator/BenchmarkMaterialGenerator.java | 2 +- .../materialgenerator/main/Application.java | 19 +- .../META-INF/MANIFEST.MF | 2 +- .../main/Application.class | Bin 7461 -> 7466 bytes .../main/Application.java | 8 +- .../META-INF/MANIFEST.MF | 2 +- .../runtime-BenchmarkTool/.metadata/.log | 8 +- .../src/benchmark/Benchmark.java | 16 +- .../src/data/CSVFile.java | 2 +- .../src/main/Application.java | 20 +- .../target/classes/benchmark/Benchmark.class | Bin 5386 -> 5243 bytes .../target/classes/data/CSVFile.class | Bin 2797 -> 2780 bytes .../target/classes/main/Application.class | Bin 11266 -> 10792 bytes .../META-INF/MANIFEST.MF | 2 +- .../CloningMaterialClassGenerator.class | Bin 3858 -> 4051 bytes .../generators/Constants.class | Bin 597 -> 592 bytes .../generators/EMFImpl2PImpl.class | Bin 20616 -> 20702 bytes .../generators/LightCopierGenerator.class | Bin 4645 -> 4640 bytes .../materialgenerator/tagger/Tagger.class | Bin 567 -> 604 bytes .../AbstractTagger$PropertiesMutability.class | Bin 1580 -> 1580 bytes .../tagger/impl/AbstractTagger.class | Bin 4548 -> 4548 bytes ...nlyTagger$StronglyConnectedComponent.class | Bin 1134 -> 0 bytes .../tagger/impl/MutClassesOnlyTagger.class | Bin 7279 -> 0 bytes .../impl/WeakMutClassesOnlyTagger.class | Bin 4236 -> 0 bytes .../pom.xml | 18 ++ .../pom.xml~ | 19 ++ .../CloningMaterialClassGenerator.java | 12 +- .../generators/Constants.java | 2 +- .../generators/EMFImpl2PImpl.java | 3 +- .../materialgenerator/start/Start.java | 51 ++-- .../materialgenerator/tagger/Tagger.java | 2 + .../tagger/impl/AbstractTagger.java | 28 -- .../tagger/impl/DeepCloningTagger.java | 65 +++++ ...sesOnlyTagger.java => ShareAllTagger.java} | 20 +- ...Tagger.java => ShareFieldsOnlyTagger.java} | 16 +- .../tagger/impl/ShareObjOnlyTagger.java | 49 ++++ .../tagger/impl/WeakMutClassesOnlyTagger.java | 141 ---------- .../target/MANIFEST.MF | 30 +++ .../application/Application.class | Bin 0 -> 5350 bytes .../CloningMaterialClassGenerator.class | Bin 0 -> 4051 bytes .../generators/Constants.class | Bin 0 -> 592 bytes ...CodeGenerator$EMFGenerationException.class | Bin 0 -> 819 bytes .../generators/EMFCodeGenerator.class | Bin 0 -> 6978 bytes .../generators/EMFImpl2PImpl.class | Bin 0 -> 20702 bytes .../generators/LightCopierGenerator.class | Bin 0 -> 4640 bytes .../generators/ManifestEditor$1.class | Bin 0 -> 956 bytes .../generators/ManifestEditor.class | Bin 0 -> 4600 bytes .../generators/PImplGenerator.class | Bin 0 -> 5687 bytes .../generators/TagsGenerator.class | Bin 0 -> 7065 bytes .../metrics/CloningMetrics.class | Bin 0 -> 3664 bytes .../materialgenerator/plugin/Activator.class | Bin 0 -> 1241 bytes .../CloningMaterialGenerationLaunch.class | Bin 0 -> 2400 bytes ...CloningMaterialGenerationLaunchTab$1.class | Bin 0 -> 1041 bytes ...CloningMaterialGenerationLaunchTab$2.class | Bin 0 -> 1298 bytes ...CloningMaterialGenerationLaunchTab$3.class | Bin 0 -> 3704 bytes ...CloningMaterialGenerationLaunchTab$4.class | Bin 0 -> 1805 bytes ...CloningMaterialGenerationLaunchTab$5.class | Bin 0 -> 1962 bytes ...CloningMaterialGenerationLaunchTab$6.class | Bin 0 -> 1300 bytes .../CloningMaterialGenerationLaunchTab.class | Bin 0 -> 8871 bytes ...ningMaterialGenerationLaunchTabGroup.class | Bin 0 -> 1069 bytes .../plugin/EcoreFileFilter.class | Bin 0 -> 692 bytes .../materialgenerator/start/Start.class | Bin 0 -> 7187 bytes .../materialgenerator/tagger/Tagger.class | Bin 0 -> 604 bytes .../AbstractTagger$PropertiesMutability.class | Bin 0 -> 1580 bytes .../tagger/impl/AbstractTagger.class | Bin 0 -> 4548 bytes .../tagger/impl/DeepCloningTagger.class | Bin 0 -> 1891 bytes ...AllTagger$StronglyConnectedComponent.class | Bin 0 -> 1092 bytes .../tagger/impl/ShareAllTagger.class | Bin 0 -> 7122 bytes .../tagger/impl/ShareFieldsOnlyTagger.class} | Bin 3753 -> 3906 bytes .../tagger/impl/ShareObjOnlyTagger.class | Bin 0 -> 1680 bytes .../util/CodeGeneration.class | Bin 0 -> 2776 bytes ...oning.materialgenerator-0.1.0-SNAPSHOT.jar | Bin 0 -> 122137 bytes .../target/local-artifacts.properties | 4 + .../target/maven-archiver/pom.properties | 5 + .../target/p2artifacts.xml | 13 + .../target/p2content.xml | 59 +++++ .../META-INF/MANIFEST.MF | 11 +- fr.inria.diverse.cloning.runtime/pom.xml | 17 ++ fr.inria.diverse.cloning.runtime/pom.xml~ | 18 ++ .../cloning/runtime/cloner/Cloner.java | 4 +- .../runtime/{ => cloner}/impl/ClonerImpl.java | 20 +- .../runtime/common/CloningMaterial.java | 4 +- .../target/MANIFEST.MF | 16 ++ .../cloning/runtime/cloner/Cloner.class | Bin 0 -> 375 bytes .../runtime/cloner/impl/ClonerImpl.class | Bin 0 -> 5295 bytes .../cloning/runtime/common/ClassTag.class | Bin 0 -> 1221 bytes .../runtime/common/CloningMaterial.class | Bin 0 -> 433 bytes .../runtime/common/MetamodelTags.class | Bin 0 -> 614 bytes .../emfextension/ShareableEObject.class | Bin 0 -> 196 bytes ...ractShareableEObject$ReadonlyContext.class | Bin 0 -> 1404 bytes .../impl/AbstractShareableEObject.class | Bin 0 -> 6293 bytes .../emfextension/impl/LooseCopier.class | Bin 0 -> 3443 bytes .../LooseResource$LooseContentsEList.class | Bin 0 -> 3202 bytes .../emfextension/impl/LooseResource.class | Bin 0 -> 4665 bytes .../runtime/util/Copy$TreeCopier.class | Bin 0 -> 4014 bytes .../diverse/cloning/runtime/util/Copy.class | Bin 0 -> 4350 bytes .../EcoreHelper$NoSingleRootException.class | Bin 0 -> 1856 bytes .../cloning/runtime/util/EcoreHelper.class | Bin 0 -> 5303 bytes .../diverse/cloning/runtime/util/Log.class | Bin 0 -> 4986 bytes ...diverse.cloning.runtime-0.1.0-SNAPSHOT.jar | Bin 0 -> 27375 bytes .../target/local-artifacts.properties | 4 + .../target/maven-archiver/pom.properties | 5 + .../target/p2artifacts.xml | 13 + .../target/p2content.xml | 41 +++ plot-all | 9 +- plot-all~ | 11 +- pom.xml | 42 +++ pom.xml~ | 41 +++ process-data.R | 246 ++++++++++++------ process-data.R~ | 246 ++++++++++++------ 117 files changed, 1008 insertions(+), 451 deletions(-) delete mode 100644 External Plug-in Libraries/.classpath create mode 100644 External Plug-in Libraries/.gitignore create mode 100644 fr.inria.diverse.cloning.benchmark.common/pom.xml create mode 100644 fr.inria.diverse.cloning.benchmark.common/pom.xml~ delete mode 100644 fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger$StronglyConnectedComponent.class delete mode 100644 fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.class delete mode 100644 fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/pom.xml create mode 100644 fr.inria.diverse.cloning.materialgenerator/pom.xml~ create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.java rename fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/{MutClassesOnlyTagger.java => ShareAllTagger.java} (96%) rename fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/{DeepTagger.java => ShareFieldsOnlyTagger.java} (83%) create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.java delete mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/MANIFEST.MF create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/application/Application.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/Constants.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator$EMFGenerationException.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/LightCopierGenerator.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor$1.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/PImplGenerator.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/TagsGenerator.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunch.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$1.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$2.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$3.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$4.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$5.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$6.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/start/Start.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/AbstractTagger$PropertiesMutability.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/AbstractTagger.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger$StronglyConnectedComponent.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger.class rename fr.inria.diverse.cloning.materialgenerator/{bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepTagger.class => target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareFieldsOnlyTagger.class} (78%) create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/util/CodeGeneration.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/fr.inria.diverse.cloning.materialgenerator-0.1.0-SNAPSHOT.jar create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/local-artifacts.properties create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/maven-archiver/pom.properties create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/p2artifacts.xml create mode 100644 fr.inria.diverse.cloning.materialgenerator/target/p2content.xml create mode 100644 fr.inria.diverse.cloning.runtime/pom.xml create mode 100644 fr.inria.diverse.cloning.runtime/pom.xml~ rename fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/{ => cloner}/impl/ClonerImpl.java (87%) create mode 100644 fr.inria.diverse.cloning.runtime/target/MANIFEST.MF create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/cloner/Cloner.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/cloner/impl/ClonerImpl.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/ClassTag.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/CloningMaterial.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/MetamodelTags.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/ShareableEObject.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/AbstractShareableEObject$ReadonlyContext.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/AbstractShareableEObject.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/LooseCopier.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/LooseResource$LooseContentsEList.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/LooseResource.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/Copy$TreeCopier.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/Copy.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/EcoreHelper$NoSingleRootException.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/EcoreHelper.class create mode 100644 fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/Log.class create mode 100644 fr.inria.diverse.cloning.runtime/target/fr.inria.diverse.cloning.runtime-0.1.0-SNAPSHOT.jar create mode 100644 fr.inria.diverse.cloning.runtime/target/local-artifacts.properties create mode 100644 fr.inria.diverse.cloning.runtime/target/maven-archiver/pom.properties create mode 100644 fr.inria.diverse.cloning.runtime/target/p2artifacts.xml create mode 100644 fr.inria.diverse.cloning.runtime/target/p2content.xml create mode 100644 pom.xml create mode 100644 pom.xml~ diff --git a/External Plug-in Libraries/.classpath b/External Plug-in Libraries/.classpath deleted file mode 100644 index 794c5e0..0000000 --- a/External Plug-in Libraries/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/External Plug-in Libraries/.gitignore b/External Plug-in Libraries/.gitignore new file mode 100644 index 0000000..5e56e04 --- /dev/null +++ b/External Plug-in Libraries/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/External Plug-in Libraries/.searchable b/External Plug-in Libraries/.searchable index 3370701..bee88ad 100644 --- a/External Plug-in Libraries/.searchable +++ b/External Plug-in Libraries/.searchable @@ -1,3 +1,3 @@ # -#Mon Mar 10 00:11:51 CET 2014 +#Tue Apr 01 09:40:23 CEST 2014 searchablePlugins=org.eclipse.emf.importer,org.eclipse.emf.importer.ecore,org.eclipse.pde.ui diff --git a/fr.inria.diverse.cloning.benchmark.common/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.benchmark.common/META-INF/MANIFEST.MF index f865de2..08a02ec 100644 --- a/fr.inria.diverse.cloning.benchmark.common/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.benchmark.common/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: BenchmarkBase2 Bundle-SymbolicName: fr.inria.diverse.cloning.benchmark.common -Bundle-Version: 1.0.0.qualifier +Bundle-Version: 0.1.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Export-Package: fr.inria.diverse.cloning.benchmark.common Require-Bundle: org.eclipse.emf.ecore, diff --git a/fr.inria.diverse.cloning.benchmark.common/pom.xml b/fr.inria.diverse.cloning.benchmark.common/pom.xml new file mode 100644 index 0000000..00f0255 --- /dev/null +++ b/fr.inria.diverse.cloning.benchmark.common/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + fr.inria.diverse.cloning.benchmark + fr.inria.diverse.cloning.benchmark.common + 0.1.0-SNAPSHOT + eclipse-plugin + + + + 0.20.0 + + http://download.eclipse.org/releases/kepler + + + + + kepler + ${kepler-repo.url} + p2 + + + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho.version} + true + + + + + + diff --git a/fr.inria.diverse.cloning.benchmark.common/pom.xml~ b/fr.inria.diverse.cloning.benchmark.common/pom.xml~ new file mode 100644 index 0000000..0003c99 --- /dev/null +++ b/fr.inria.diverse.cloning.benchmark.common/pom.xml~ @@ -0,0 +1,38 @@ + + + 4.0.0 + fr.inria.diverse.cloning + fr.inria.diverse.cloning.runtime + 0.1.0-SNAPSHOT + eclipse-plugin + + + + 0.20.0 + + http://download.eclipse.org/releases/kepler + + + + + kepler + ${kepler-repo.url} + p2 + + + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho.version} + true + + + + + + diff --git a/fr.inria.diverse.cloning.benchmark.materialgenerator/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.benchmark.materialgenerator/META-INF/MANIFEST.MF index 8480f20..9009a7d 100644 --- a/fr.inria.diverse.cloning.benchmark.materialgenerator/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.benchmark.materialgenerator/META-INF/MANIFEST.MF @@ -3,14 +3,14 @@ Bundle-ManifestVersion: 2 Bundle-Name: BenchmarkGenerator Bundle-SymbolicName: fr.inria.diverse.cloning.benchmark.materialgenerator;singleton:=true Bundle-Version: 1.0.0.qualifier -Require-Bundle: org.eclipse.core.runtime, +Require-Bundle: org.eclipse.core.runtime;bundle-version="3.9.0", org.eclipse.core.resources;bundle-version="3.8.101", org.eclipse.emf.codegen.ecore;bundle-version="2.9.1", org.eclipse.emf.ecore.xmi;bundle-version="2.9.1", org.eclipse.jdt.core;bundle-version="3.9.1", fr.inria.diverse.cloning.runtime;bundle-version="0.1.0", - fr.inria.diverse.cloning.materialgenerator;bundle-version="1.0.0", - fr.inria.diverse.cloning.benchmark.common;bundle-version="1.0.0" + fr.inria.diverse.cloning.materialgenerator;bundle-version="0.1.0", + fr.inria.diverse.cloning.benchmark.common;bundle-version="0.1.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Export-Package: fr.inria.diverse.cloning.benchmark.materialgenerator.generator Bundle-ClassPath: ., diff --git a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/BenchmarkMaterialGenerator.java b/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/BenchmarkMaterialGenerator.java index 1584366..d430a43 100644 --- a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/BenchmarkMaterialGenerator.java +++ b/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/BenchmarkMaterialGenerator.java @@ -22,7 +22,7 @@ import fr.inria.diverse.cloning.runtime.util.EcoreHelper; public class BenchmarkMaterialGenerator { - private static final String[] cloningNames = { "Deep", "MutClassOnly" }; + private static final String[] cloningNames = { "DeepCloning", "ShareAll","ShareFieldsOnly", "ShareObjOnly" }; public static MetamodelMetrics computeMetrics(ResourceSet metamodel) { int mutableProperties = 0; diff --git a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java b/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java index 46b23dd..2935aa9 100644 --- a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java +++ b/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java @@ -34,8 +34,10 @@ import fr.inria.diverse.cloning.benchmark.materialgenerator.generator.OsgiBundle import fr.inria.diverse.cloning.materialgenerator.generators.EMFCodeGenerator; import fr.inria.diverse.cloning.materialgenerator.generators.PImplGenerator; import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepTagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.MutClassesOnlyTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepCloningTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareFieldsOnlyTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareAllTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareObjOnlyTagger; import fr.inria.diverse.cloning.runtime.util.Log; /** @@ -101,10 +103,9 @@ public class Application implements IApplication { tmpDir.delete(); tmpDir.mkdir(); IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription("yayProject"); - + // Problem with spaces? - - + description.setLocationURI(java.net.URI.create(tmpDir.getAbsolutePath())); IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName()); project.delete(true, true, null); // to make sure that there is nothing there already @@ -133,10 +134,10 @@ public class Application implements IApplication { // Tagging Set taggers = new HashSet(); - Tagger tagger = new MutClassesOnlyTagger(rs, name); - Tagger tagger2 = new DeepTagger(rs, name); - taggers.add(tagger); - taggers.add(tagger2); + taggers.add(new DeepCloningTagger(rs, name)); + taggers.add(new ShareAllTagger(rs, name)); + taggers.add(new ShareFieldsOnlyTagger(rs, name)); + taggers.add(new ShareObjOnlyTagger(rs, name)); metamodels.add(rs); diff --git a/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/META-INF/MANIFEST.MF index 0ec093e..f897a30 100644 --- a/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/META-INF/MANIFEST.MF @@ -9,7 +9,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.gmf.runtime.diagram.ui.render;bundle-version="1.7.0", org.eclipse.gmf.runtime.notation;bundle-version="1.7.0", org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.7.0", - fr.inria.diverse.cloning.materialgenerator;bundle-version="1.0.0" + fr.inria.diverse.cloning.materialgenerator;bundle-version="0.1.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Import-Package: fr.inria.diverse.cloning.runtime.util Bundle-ClassPath: lib/jopt-simple-4.6.jar, diff --git a/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/bin/benchmarkmetamodelsgenerator/main/Application.class b/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/bin/benchmarkmetamodelsgenerator/main/Application.class index fc3bf5e3892ef6fce918250ded6a23cb083e8e05..4a2ac3d0990ae73bd800de89d47c64642a131b7e 100644 GIT binary patch delta 53 zcmZ2#waRLP4L76fWLs`?j^K>MqEyG6oXJhxk&HedA%3usTV`rbO0j=lPUU8C9zH<; D(9RI= delta 54 zcmZ2wwbW{Z4L76rWLs`?KHt(3=bXgi;?!dQyqwC(HQbSt4S94X&lP5$oX^e5;*y$L KuvvzOPY?k0XAu+t diff --git a/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/src/benchmarkmetamodelsgenerator/main/Application.java b/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/src/benchmarkmetamodelsgenerator/main/Application.java index bce9797..3ccea4c 100644 --- a/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/src/benchmarkmetamodelsgenerator/main/Application.java +++ b/fr.inria.diverse.cloning.benchmark.metamodelsgenerator/src/benchmarkmetamodelsgenerator/main/Application.java @@ -17,8 +17,8 @@ import org.eclipse.equinox.app.IApplicationContext; import fr.inria.diverse.cloning.materialgenerator.metrics.CloningMetrics; import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepTagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.MutClassesOnlyTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareFieldsOnlyTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareAllTagger; import benchmarkmetamodelsgenerator.diagramgenerator.DiagramGenerator; import benchmarkmetamodelsgenerator.generator.MetamodelGenerator; @@ -100,8 +100,8 @@ public class Application implements IApplication { resource.save(null); - Tagger t = new MutClassesOnlyTagger(rs, name); - Tagger t2 = new DeepTagger(rs, name); + Tagger t = new ShareAllTagger(rs, name); + Tagger t2 = new ShareFieldsOnlyTagger(rs, name); double m1 = CloningMetrics.computeShareableClassesRatio(rs, t); printer1.println(name + "\t" + m1); diff --git a/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF index e92a3e5..3fb5858 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: BenchmarkTool Bundle-SymbolicName: fr.inria.diverse.cloning.benchmark.tool;singleton:=true Bundle-Version: 1.0.0.qualifier Require-Bundle: org.eclipse.core.runtime, - fr.inria.diverse.cloning.benchmark.common;bundle-version="1.0.0", + fr.inria.diverse.cloning.benchmark.common;bundle-version="0.1.0", fr.inria.diverse.cloning.runtime, org.eclipse.emf.ecore;bundle-version="2.9.1", org.eclipse.mat.api;bundle-version="1.3.0", diff --git a/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log b/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log index 44ceab4..7133771 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log +++ b/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log @@ -1,10 +1,10 @@ -!SESSION 2014-03-10 21:15:31.638 ----------------------------------------------- +!SESSION 2014-03-31 15:17:24.725 ----------------------------------------------- eclipse.buildId=unknown java.version=1.7.0_51 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=fr_FR -Framework arguments: -application fr.inria.diverse.cloning.benchmark.tool.application --benchmarkMetamodels=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/big1/bundle9.jar --metamodels=mm8 --nbClones 1000 --nbtries 50 --outputFile=/tmp/results.csv -Command-line arguments: -application fr.inria.diverse.cloning.benchmark.tool.application -data /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool -dev file:/home/ebousse/Dev/modelCloning/emf/.metadata/.plugins/org.eclipse.pde.core/BenchmarkTool/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog --benchmarkMetamodels=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/big1/bundle9.jar --metamodels=mm8 --nbClones 1000 --nbtries 50 --outputFile=/tmp/results.csv +Framework arguments: -application fr.inria.diverse.cloning.benchmark.tool.application --benchmarkMetamodels=/tmp/bundle.jar --metamodels=mm8 --nbClones 100 --nbtries 1 --outputFile=/tmp/results.csv +Command-line arguments: -application fr.inria.diverse.cloning.benchmark.tool.application -data /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool -dev file:/home/ebousse/Dev/modelCloning/emf/.metadata/.plugins/org.eclipse.pde.core/BenchmarkTool dummy/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog --benchmarkMetamodels=/tmp/bundle.jar --metamodels=mm8 --nbClones 100 --nbtries 1 --outputFile=/tmp/results.csv -!ENTRY org.eclipse.osgi 2 1 2014-03-10 21:15:32.803 +!ENTRY org.eclipse.osgi 2 1 2014-03-31 15:17:27.240 !MESSAGE NLS unused message: line_separator_platform_mac_os_9 in: org.eclipse.core.internal.runtime.messages diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java index accc243..020bdf4 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java @@ -15,8 +15,8 @@ import org.eclipse.emf.ecore.resource.ResourceSet; import fr.inria.diverse.cloning.benchmark.common.ModelCreator; import fr.inria.diverse.cloning.runtime.cloner.Cloner; +import fr.inria.diverse.cloning.runtime.cloner.impl.ClonerImpl; import fr.inria.diverse.cloning.runtime.common.CloningMaterial; -import fr.inria.diverse.cloning.runtime.impl.ClonerImpl; import fr.inria.diverse.cloning.runtime.util.Log; public class Benchmark { @@ -61,7 +61,7 @@ public class Benchmark { } // TODO option to not keep dumps - public BenchmarkResults run(CloningMaterial cloningMaterial, boolean light, int numberOfClones, + public BenchmarkResults run(CloningMaterial cloningMaterial, int numberOfClones, boolean computeMemory, boolean computePerformance) { // Creating the cloner @@ -74,10 +74,10 @@ public class Benchmark { tmpFolder.mkdirs(); // Printing the current run - String lightString = ""; - if (light) - lightString = "Light"; - Log.info("Metamodel / Cloning technique: " + cloningMaterial.getClass().getPackage().getName() + lightString); + //String lightString = ""; + //if (light) + // lightString = "Light"; + Log.info("Metamodel / Cloning technique: " + cloningMaterial.getClass().getPackage().getName()); // Creating the model to clone ResourceSet model = modelCreator.createTreeModel(); @@ -91,7 +91,7 @@ public class Benchmark { // Echauffement for (int i = 0; i < 1000; i++) - cloner.clone(model, tmpFolder, light); + cloner.clone(model, tmpFolder);//, light); // Cloning "numberOfClones" times and computing time Log.info("Cloning (" + numberOfClones + " clones)..."); @@ -99,7 +99,7 @@ public class Benchmark { long timeBegin = System.nanoTime(); for (int i = 0; i < numberOfClones; i++) - clones.add(cloner.clone(model, tmpFolder, light)); + clones.add(cloner.clone(model, tmpFolder));//, light)); long timeEnd = System.nanoTime(); long timeSpent = (timeEnd - timeBegin)/1000000; diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/data/CSVFile.java b/fr.inria.diverse.cloning.benchmark.tool/src/data/CSVFile.java index 34faeb0..43f9123 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/data/CSVFile.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/data/CSVFile.java @@ -9,7 +9,7 @@ import fr.inria.diverse.cloning.runtime.util.Log; public class CSVFile { private static final String[] columns = { "NumberOfClones", "MetamodelName", "MemoryUsed", "TimeSpent", - "CloningTechnique", "ModelName", "Light", "OriginalModelPerformance", "CloneModelPerformance", + "CloningTechnique", "ModelName", "OriginalModelPerformance", "CloneModelPerformance", "ObjShareShareableClassesRatio", "ObjSharePartShareableClassesRatio", "ObjShareIsolatedShareablePropertiesRatio", diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java b/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java index 88e5950..4c6828a 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java @@ -159,14 +159,14 @@ public class Application implements IApplication { for (String cloning : clonings) { - for (boolean light : lightNot) { + //for (boolean light : lightNot) { boolean computePerformance = true; for (int number : nbClones) { - String lightString = ""; - if (light) - lightString = "Light"; + // String lightString = ""; + //if (light) + // lightString = "Light"; Log.info("CSV line " + (counter++)); @@ -175,14 +175,14 @@ public class Application implements IApplication { CloningMaterial cloningMaterial = material.getCloningMaterial(name, cloning); // First attempt, to get memory measure at least - BenchmarkResults result = benchmark.run(cloningMaterial, light, number, true, + BenchmarkResults result = benchmark.run(cloningMaterial, number, true, computePerformance); multipleResults.add(result); // Remaining attempts, without memory computing for (int i = 0; i < nbtries - 1; i++) { BenchmarkResults result2 = benchmark.run( - material.getCloningMaterial(name, cloning), light, number, false, + material.getCloningMaterial(name, cloning), number, false, computePerformance); multipleResults.add(result2); } @@ -194,14 +194,14 @@ public class Application implements IApplication { Log.info(results.toString()); - cloningMaterial = material.getCloningMaterial(name, "MutClassOnly"); - CloningMaterial cloningMaterial2 = material.getCloningMaterial(name, "Deep"); + cloningMaterial = material.getCloningMaterial(name, "ShareAll"); + CloningMaterial cloningMaterial2 = material.getCloningMaterial(name, "ShareFieldsOnly"); MetamodelTags tags = cloningMaterial.getTags(); MetamodelTags tags2 = cloningMaterial2.getTags(); csv.addLine(number, "bundle" + bundleCounter + "-" + name, results.getUsedMemory(), - results.getTimeSpent(), cloning, "default", lightString, + results.getTimeSpent(), cloning, "default", results.getOriginalModelPerformance(), results.getCloneModelPerformance(), tags.getShareableClassesRatio(), tags.getPartShareableClassesRatio(), tags.getIsolatedShareablePropertiesRatio(), @@ -221,7 +221,7 @@ public class Application implements IApplication { } bundleCounter++; BundleLoader.uninstallBundle(); - } + // } // csv.writeToFile(outputFile); Log.info("Exiting benchmark tool"); diff --git a/fr.inria.diverse.cloning.benchmark.tool/target/classes/benchmark/Benchmark.class b/fr.inria.diverse.cloning.benchmark.tool/target/classes/benchmark/Benchmark.class index 394e594f1677c3bd00a9d3c08909b3664b7d9eab..a50faab024dd01cfa0c6111903e299c43aa5c4c9 100644 GIT binary patch delta 1359 zcmZvbdu$X{6vltIyE`*GGwpV_yBoIwX%(ae?TTOuhX zkiUw|oyRwC0fzI(dNZPlNwPpImy@+YqD;=y3boqCnW<#6Y}cNU)%rl~0UODKa-M!> z|HVA4vqTWMB{3@zZ%m}>;$s>UEiE=nSthsZgSAIlp|e~b)uX39#&m&Rmu#JwXiA#2 zvs!1Bpj73EEjrZSXY)8JgE3Zg$mPa}!B6w7&NG6@v}CHbzA4c>BVL(oo<6g=DUqs8 z+T6(+LA*#_m3_9axWeE$S?uqpt+Tm_^>Vzw(7%CAIvWKgP8D*oKj_N{>Rp1|=g$$v z4mEAiCGd|?H8!N`3W^Li3#OlNyib>yLhT?6C+*vT19t$$?*IMqNmj8 zAQbb(^qAJo3m&Q$7$RZ>J%`)-j-*{qr{eU>aBryl-*i3n)O7MvxzWXzGQX$P>L3;~ zPKnaZt63_PB_dY8_P#^TZ&uWb`jcUHHkDl97!v1j5_|L zUig?HOd3Uilo&vZID=Mk7PG`K=7>?;E=H?!9CwH-m@BSUd+*3tL(mzjk~3C)Ip_c% zAzbt^23aopgd99B`cxq=rWns>e2$NFT&4H|8%=3H#+Q7BuHJP%2Nl^+TJPa&4k@&U z`5fjOwMBaw;Cd}3dNSXtJ4;EgS0{ACyL0$vYAE zM~r$#sH+<=j7ixshi2Ks%E}U@Z!eA7On2s<`#%Wrikj8OEsVrCN+B<#Dz%)E$fQoi=NA-{nmW15a z%9MdIEvUsAR+VV)sY<&yq-VFFrQH|OyO~^_W_3_GB+l|UEpb-InI6=oi8Hg4^1{tr z5T`BV5ilm5(27;$r#+Df1U;QR)x3o_P-9b-Ki)D8acTu&( zP#H$5^H6K=VY{eXigMyCO?%6c(aB4tUT2A~ovfhIN7KjB#TyQx@~I48 zPHXSMM4m6xm+6h9^HzPSKb?0)BA{=HGy+o8wt@1Hj zoyA<0L!IhRgBn4j8cmZ5u~1FmCUpfjt7-DB;Z_yqHZ_aI@szMI&oz%?d7~hLf4{e;y z4>Dp1{ZfA9CqV~T!p|JRE7`er)F(!+@)5xakZ0PSS@E`sGJ~ccc7p5 wjDv0+4V0h%?@Eielj6uB?|6H$oTSKIPb`+pc4FW-K|s{06q%@3yg3yA09(v>lK=n! diff --git a/fr.inria.diverse.cloning.benchmark.tool/target/classes/data/CSVFile.class b/fr.inria.diverse.cloning.benchmark.tool/target/classes/data/CSVFile.class index 4c008ea73182eb7f818ba0afbb6e2c8ee3ab4c0e..7b066f478779cf046fc89ad73c491bf2a8b3ddcf 100644 GIT binary patch delta 1097 zcmbu6%TH5L5XQf`_q4ZMt^&mhiUf%W|nS`3^-CBf1c zi}ZxeOq+o)bk4MPM!PxFj);a1S#C+E(=udvN`3ODrG)yW$Lg|P!*vaD8MbanzcDi= z9E(L`=GHe&CxZl+{HU&%pR5%$EFIde#P<;V13)y{F2h6-Y)kQcwpwLP$juR`A*mbYLaUaD5k_n`fqg$$L@4F_C4EAJaHLP%wtl zg2LDE*|!E?z*FzDPI@h>SB%7wv&!lap4tic>x;&*Z44EzQS7$w*CrIJg9X9wpu<SY2g<-RNO;fqPsK)67oO zKpJ{A?j;r%fwj{JKwXs9&@OO;*SXA3#7$J8IaEVTsBn@QO+JRreq|h23m0hp8`i*o zz!D5A``@%qF{}72E$P$)izp4vQyRh$hS`G3yk;roFr{0#&6)0bO4pZADu(43Qkc#( Z1Da)Z=P#=}OIXdOXIK%myG&TYy+3Wy(tiK| delta 1167 zcmbu6%TE(g6vn?hGo2Zxqd=hoF+LEKN2!g1h$s|!s5}ZNh!#aHWq`rbYN>CrilE>t zA$M(zVZq7;Dvv|jW5ikdxUI1uthx{Oe>5$%pd`vc*ip<)+Wie!O zzmUcD@-gOSIeeCtNqG!Ke4g##iDH_l!o@v8Hgoedbhsj+{8MDGaPNJ`=DiW&DOIUEODKA>odL;=MVOR<%r9oxxd3AUh| z*40Qv9g@(DWVFG7i%3ByQqc=1!q|rER3D@N;gv3+rzpV@igrqUbfrT2Q2s1R^Ig+8 z<|y~QN0Gl&UW^yp#A0a@*%`7^I@q{?3V*>IDra%RJ%d_@kHQR^e8UoRN>1C`hd=)#j)}9l+~}s-PHJRKLT#jf?-Y#`#2wrx#G+-EFQ{d4 zYv^*w)`;jQJJvUZ2vn-paTC|bo`6iGBTAV_>jVstT@iz1?FLndxJ75&kd}#>qJSy5 zt!w`w$CbMQG=9JkfjL?i5#`KpsiT6bvugXoO*1J=V-0Qwn%|^CzC|YA9>$*@147S zck;4p-E*r>ukXaMgeVy-9Sy5q$9Qft$cGOIG(XWf=Q!)3=i4myZT>mTmSG&fyLbI?s>TfQmT zHiHH|R$qGkEEjG%=_8!s&5@4i9kG~`8H9I?Eo+I!nmSj+V?AliWR`JA18*GYuBu2ZX0N z+O@hf+O#~{*51*RY_P;&Da!~$JgZvTqT#L4c$bVHn>Dc!arZgGJ|&t`M$r_ewV>|-fey0 zFS&EM!F%8&(pusV+}qLK+!5{UOv6duYj7p@N^6@Vo%ckyce!zfVS}rZvEJ@@OT4oy z5{oSw-`N_gC1YCdI>LWfd|M>e(v;u6wX3B)-dUIL=6Zh2!TYV=jJ!o3m)*iGi&`#a zBF#}Z4soNwP3R?T(Tnk%o+S&*J@H&h8uz;@^X~F@%HX@N&ah zT&$}w3(P{ZWEfWz>MG45voaXcgJpwcU6om3Rt?jpVXdmI?n8-q$AS}M(ZP^P#nnh$ zO)748HG|crUkd9@y`!%w>8xUi&bn%|dXVW-Hklwm??kyV=1;L2vvQaL8Dds4TN2DR zvwa!gg=$d2&=AdVgPt5Fz(h`Roar)4fYS$=Zx+fg87tgiOV%kIi?t_V@eo7d28US^ zZg2)z9d7WAnP-ieeU4$m0d6PO7NrY*=0c0ysHKEf_`%Ldlzzu`7PHY6JL zi~OWOJ9_jNxLuF~PwI!*BglyXeFq;Bcor0$D37KZCq@KzHYRfn}t=1qcUXw4XW&Aw%Ae%3# zTlod<#WY@4AwI@0B8OL02_KiZT)v@ZGVz2Mr}LWj9&;sOo<{BO{1Tr;fmSK~J|*56 z+A{4Jnx(-R+QV8aEq)n=+EdypKFzP7NIR|7@~h%4)<*e9?h|i`()fEmBSp$oE??k& z$r6%Qp5_4_M1`uC_73rDs8s6`vfi)r8>muI%wewtR?Bg@d01>U>M(2gO+nS_g1k$Q z$VY0_C3zn|%cGbj2X>8pf@aHAy*^ro|O8yNS#P& zePUAU6O&q>oYeZ%q}HcI>y*N$Md6gL&&!@t680l7zN>!ORcbH&C?21D02MqVCz^q* zQ7%BH19ZR|ESfj4pvbSOY*bj!7p<~?AOX2J3uDTTqCDb_X*Z^1=lQN4fOB zv1t>rE|iUb-fKM*YE>>22)}#MKNTL~C3#Yn>+?Yl$;|TqkSr`BPfebN{9UmQmv8zH DwH+?Y delta 2544 zcmai0Yj9NM8GfJhowH}Ndp3K^5>6751#;U!t|S|}0jUVuASf6v3AEtGEFrjTAlcxJ zb^$3Buv9p$q6io&1WO^9Fd-=;qvL3i+9GXj{Q+gh-bOpx3&ko$()X~-+Rn7o{jvKz z-}{{RzVn?U3pY2PSm1D5>F*$AZb$p7xJsXZvW;Fx_Czav3d*>nX|X@r5sUb3bd|1Y zq*AYmu50u;-7t1J%B)vG8UV?7-BIk4H7KxvL|0D?w5-$!I|IgTPN$_|Y2(tR0mGG@ zXSc&je^HSE$};|H%d*>GheL%1$}!y8If{l%IE}rTb29B9J3Poz;RV$jFWYsa(&-mI zj4|$W&Y3n=qs`DkV@ewXb61DghbyDuSbJq-EFNi(bTwF!3$nEK#M+_}E5?CP&Z(n- zQ-|Mp&sk%!V}gc>hRc;T-Hsv+#VFxo+9UCW9cv;@Ya_8ZS5g|7WkUdyRFr{SUxb;} z+0z=0m?=y)!mb=&1xRg+tPJ-=<7P!w8mduZJmvCR?U} z?M?^R{3W)Jb&sYRI(uRr zvF>;{8l9PH)WCwJUpkh?LqJ{;|6^LMU|cXYtBSk{M8eX_4?N-!V?%XQZX^?^c_eYmJsru55) z=(oWN&(2VlFYqj>o-3iM({#1P^N&;XnJ;fk9){?jLo_-}&!47qEvM-1P_;f@pQx9N z&}BiP8ofxbN%#W33fWga1QD8|SL;(oph~nv1Z(>!z=ALIrcfk>bu6q)3b)k4SF5`@ z6S=K-^n&12tA}9=)#|lFaB*nUgXg1L5lwO_N$T{P5x5gvRM2$hW>Bx^xV*2BXc4}O zVPrS8$YwoWP2}|i_4-{ z@waLkD{mTIRuk7GafY4dq&A&d=oYh^Z2B#xne5BAn8Rdu++vw}{l9r}nk?^>?CIg&kF#68m;Ls*jR)iAzVK7bWNhzy|P1c5$QLdtYB+ejvjND9%; z!8ZyXMB<>xq8CLr9TqjzCxUcDG|)?81|1cP>6lnS{US;OqK5{>L;SmePKvE`N<2x! zVkeD={q!U80^>t;TJ-bz89F0gqu0b)dR@FjZ-`6urudM~iYxS%xK2Njr_$TJ^i`ni0bej#6?U&?=?cjZr5{2BdPzD|b~3msHk)T`vsPNk53 zqmxf~^haemeLxPbEuVtse~&WBN&Hb-u?8`2fm>OCPAVjc zbfpn%v5o{K8k7=rp_|*%tk@7|q)@9u=wW1`N8}H%o{>ts6T@P#B2>xlkbI z(lSKJjZ)czP1sBxOp={=oFDOGruYSmOU?{GCs z*!5WK6$eu2gxF3^Y}N6qcobXlEy}@LVjZ5qHp<0Cu^fr**g<)?ESBL(7LLRFq8Z=j zvwU0=ReU#Xqyh;dfSnv*yj0HVKE>7v(w)-psGSp>AZ?KLV;6SQL}|D51Ppwailh_L zYJ88a#nPzc#?x#q5n1>fp5Yh)k&QoN52JEXlfXGV%ML3<5O3l+7FLNB*oVD%o~lKZ zgYCn9su3Ho5eM)BO%dCu4!!(DEiau72l=c{oaKw_`;2PEhkO&i$WPRXD|~k!!eI)E z>wKy9F{iDI;Hf8P{WAA1Io1L4rusLK&kamAYk-PVl@C%iP7+ymkv@2!aK0pTD&Jjnw{gCB ztXHMgDjg?4#VMju@=;aFG&X7CmmD_n70N2M=Tddbp8Fqmu$>P~$y};SNs9lQM1@s_ yN9C6VqM}hW{-1!_|IXDyfn*@R@#E4~etWu6xCkC&W1t+(#_@oT`NrA6{r>`g+E~K? diff --git a/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF index 97ad9ff..556b044 100644 --- a/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CloningMaterialGenerator Bundle-SymbolicName: fr.inria.diverse.cloning.materialgenerator;singleton:=true -Bundle-Version: 1.0.0.qualifier +Bundle-Version: 0.1.0.qualifier Require-Bundle: org.eclipse.core.runtime, org.eclipse.gmt.modisco.java.generation;bundle-version="0.11.1", org.eclipse.emf.common, diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.class b/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.class index c85f35bce77578d5b4a7360dc8ddadd0214fddcc..372e5c6a7da1588d3a039f76435f7d2c11ca44bf 100644 GIT binary patch delta 910 zcmZ8g+fEZv6kX>G?R2KCAtfag4HnWM2n4*LToS>GBBEd_Q6mTg8L?VgGc6kA0iR5K zQDN|cC<3D3-GY>xA}Ykh#3vJeKtDhq^+DXFl87&}*EwsSwb$NfPFKp8_3@v6PtO9_ zf&~$r!J{ieR=CJ!&^rzJMiF%kS$dz8Xm1U9eYs^#0ZpwT1Aksj;n$OlP}nMgqDl&{4>c+@iD{R+`;DB^XqL)ruDKoKomOqfa&AI)hnL zL#>+M=~vG?O}NP*WMmeZ(8FN=hlz8NG~*w;%+q0cAs<{aZ!l}F^LE&9mWWT!(gZs%7k+2 zS%6HxL4{6S0-0VH?{(F&jHrB?_1i#jGDY*&IsPB1$>1izi|?&&FO} zg>tT+;OGY;|Z@CZiK2AS)MOiH;9X@r+hc^c*k9a1^~n7*v_iD8|Toy08bYh>fFmoERr$K!7h&J7Kzp zi+lkS7=(yEK8#6XO)Q%`FhxirgF~1mB$I_y%-}VhXnsQ#%MrIkmdzq&ML0y{i%3`o nG3;K!4#2*IQqar!KM^#-ku3qm zOufNxHDlv;!n`HK)<33H}jqOzB4&z&iAEoupsN>^4xm> zRd}a?GaOKcD4(jywyPr|zdYHSu%dAplJVoR&ytCrsF?^w);>rMXz++)Z&X`C`bQ8QE*+1=MEyDj>K2MG`S8dVssy(m0w%Ap4?oOv#;2}ft`E}YIz0r@Cf#Di8|hoFdsq#AEr8vef$F= zdJSkivqNW610j^91^?GChE|UNdRZy0R}`pCh?H26bT;TF&WLECwK}{ zB=n4|3Is&}FKB8bp=G=zWQWOTFhx8E&hiONV+0yT`FW&h>SPt{2WAMl$k;i&BBYar oBBYU7!D|vM1pghRNE{m8Xz*#+q#E;&HtF1GZ|bO#lD@ diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/generators/Constants.class b/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/generators/Constants.class index 0d7a6caefcfa447f8f8eb8ca2e49db2cf45b3e9e..d0d94a60d96fc1aa2baa737654cee1c68b8a5c39 100644 GIT binary patch delta 12 Ucmcc0a)D*Sd`7m7OE)kA03nG4>i_@% delta 17 Zcmcb>a+PJmd^T>M%=Chbo4Io{R|!Tl-X;Vl3lT^HlLyp>K!g>CwVI>wA3AWcTNH-&r&v{~>lMOl*p^$2y~lnCu_-4v@iz zxxwUmg@y~kD$+JepvkkQ`!?Bpl$&+!tobuG1sLWwn~!0VLRM2OQMJ0Qqop;PXj$EU zTYF0)9>8QiZgaaHob|5p1DkvG=GpnyQ+(Rwj}>O>8?9`e8J;+)A(pVY-;H8Rl%=uw z>NTBr#o{LW6|TSFm6dyd&)R&>^$K`D{qP3_3da=Ebiw?1*4^{qg5ht z%;w8_Z*jKqibBZSlP;29MTpi+hXd_$H;+~t_Zw`~5D zKhwn}i+w-0d5-Vsu97z20N=IwOZ~5s*NpQvKhnob52;TE+sfY0v>M<;2B2OaT)H@< zy8Dnb^9bf9*&%E>zF{UD(*=%k?U&%+{Sthg;2lXW71>z*nB!PUb)CW~IOTrFm*gV~ zjz5X#h(^Z)dMLo0q>9Oe%x{sQESaaUd;F|~YEE*i%os`b%95gkB5wm>`L4qho%4-l z-BUSLRdBkxm4&L6VYQJZY6nZzUY4onWjw?i)LG6$v8?Gpz)cw?D3y^|)XIQ@UyZ37 z)j|+gtD}4ZnMgxOJ;NQa-Q855@+lMP_?qhFPJUmg+k=}>hB+|j<7q75E-r_quEint zaW_o05!1YBzj{ITv1JP{9G{eMD+Fmq`Z#)F>H3?mxl;V60iWTU<5&j2K#qZN%-6Ly zmv`?`coj2_Be`s5L6R~m9A@(|H8PA7g+n+g*bf!N7{cj;se#K-n#a(U@&_ZZSdH1N z@feumVwii80nGLCQ7*PX%~kw}vJ~^y5ycTdMkvbwy(w=tEu6DGumoBiCIk=XTPQl)f3_Px=rL z)j8?IJfuI46h&7e#Jf?!CRDK*5w1crThYZftQUKm%##>g+L9Cwv^&|EbQkB-<>GN~SurB)j|6MUK+@aZXt9 zIO6GY!!gEC*@qL3aSD~?z9O$*Jf6$_{n#U&lX5*%ZaU@|oIdn8W|C(WT#2~-^O{0R z9$9=nr3;VVsAIY^id$4Jd(<@URf|NGw~N?1Cu$8~#`!I#HMz2jR zd@ApU+r$}ak-UK)h*S)9yGTW%=fLn@WdGjny9!SmSt5#R$1h@gQy0{i6(2?p2k})NMWwXSO+1F% zID$^Tgw67l?cyk&l<|J?d69?ZDmbHi>x02R$ZhD}BP0ByuuSCO3I2(H)}!?UlRp-m Z{0sjo|EpxKOCG$x`7EjO-}w(%{{wj~6tMsR delta 2150 zcmZ`)Yj9Op75>(jlY8#r9tEKjI1rMC;nn0O+&oIhTiRG+FgMVsFp5Q`Qs%Zqp`}T% zmQrr1P=aZovgso&EsqqEQn9?lO-LI+DPpx&tF6_xTCLA<#+mxZaWt-dZiq6Yf6m!^ zeP^w`9^bdmJNu-4pNzZoul^SSRP#?RD5x_xm6w@Y^Cul$(q2ZcHBS8Fkrtm{W~*t6 z*Lv%CkISzL8b`j1nOEWkd0*qb=KXk=cOUO}x#2%iVrH;>Y~DsiUo9{29^iv6Hwl)E z`cAJX&ilHe3o2$u9`d=B?WV2b2JfL56YTK$u<5TTbhi84Vcx2E-FedIQ|8#5Y2F_0 zbGcVgYDyBbCND|1`P`4G0{@P5+v0TVUF%v_rdwS;Yl;%_!fqb)*<<0D!gY7u*_OVu zP0{BBMe1K*GL_M3G4@JgjMVU3J`dxtAdvT_JY3K3`MkvMo6l9%M}FY*hkVs^SFMTk@-?47HU-reonQKV z+q_qO)cJ#8x{ZJQaLxH~-gHDT29Uwy_tuw4rZkB3@$SGaJ%PEW*=Ao^uF>0JM&2q6I>Gj~+z{|=E!4QIEG>BxmSrA0CI7BQBLcvFx|$>EnZ z)T%7Mp^%ehr@E9MQN}q)=yM~AP17fC$s{;S8dxS@;v8AeO4-IL*~x0ztNTN|P6n7n zrGCE_F`b$5l*{1BBpl#ld>pQ<$IK9p%3(dn*CWDkd_u$Brj`^Ov%F!3beQgj zWTs1S0oM#5drN6qmb#1gan)(*@55mH6kbx>Zh!`#bdVs4nUSR0?#f*IzJ2blw^Hl@{kF*SS2XG7ltMFDTr*R#H6Z>p$Rr=R6B z`j8UA%{|y0&rOxxi!`YN=IzwvXm1yq%7@r%hEp>pY0^P{mWMQVKHr6yawo{|cNNX7a@z^ zh-W$YU%s!6`VLv&v#9ODVBid)HW?|;vR)MuwmBK?!EP%JD<7Uqx`BHZK^NKsH_Pt` zEN84_zAMP_Wdbkch@xqje=aPQi)QwsDtX0xe$nKqKe`-Mv;XvH2E9qgR%W7&h2hAw zk}F2$*pXdWG(EFX*^)sKA3y~+p^^`xM)x;zE0(bxw{aVq*?}#57$?|?0dB{;+<`yy z5qzMU`UiJv^LNQuJ}TqcA%)y3GnJ0>xkr}kecZzRs@*-Ru%~4^4~Ao3uhP-h=f<9~ zOFLPej9uAjQ~x@hJfpTe6rq4W(UpT`ILFudQ(ZOVIDf`BRIppn$v63P73=_(hT8P- z0g6NAj*UNHcBMa$lu`)V>}|38u_eK!kE9@JaJjC%Q{P`u{k6JtZ9^K zUdSc;y_#JPg_NtkjCUgTKXI4m%<`s5?ue7QzbVKa6~+yQF=d3pqk(%Z5~3l6!#uCd zMrWo!fgG9TO>L82^5|DO{=)pV>Ar$@tT^X|oSmRIZDSBs`du`eK3Q|?QB2`6T&Mb~ z6rU;wjx9&~IK)wJ06Kku_+C^?=d)qo42UHEHjje*Q`)K`mkz kf6e#IRiApk_%~`Nf6MpvJzlX5`bYd-#8Yzoo_~b*Z{jrRhyVZp diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/generators/LightCopierGenerator.class b/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/generators/LightCopierGenerator.class index 67ad31d332bf1416b5b4c3f5d13def2edaf4d32b..935714d3eebbb2272f3b6dd77a95aac155219b48 100644 GIT binary patch delta 14 VcmZ3gvOr}6H!~yKW@>1{@ul-zXCf2H6U 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 diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.class b/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.class deleted file mode 100644 index aa195273a379d41a1087c69a0db98b0e4d245501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4236 zcmbVPYjYb{8GeqXczsznjbkS^%|!`m@huTe3#3*qIF6FIl`pl7(}YV{%g4$lt6gPx z<;H1gfws`5T+?uI3Z+oMTnZ#<>(nj76lOZZ@Co<{eC8vc7zXp4-L))R_GIX2M(609 z_q^BVz34ChediAV9>DK4)Cdeuxk=M@O(QvJPD|I5$(-fbrkzg~3}5ox%1c|ihVQsZ z-^k}B$qPj*c}f}=21|awWq6+ShHYzREV$JW7f63VrhOBh?;1HjWF=60(6mkeus~l& z#&PpWnX}9yRg{G(?j2VqUFkU`Hz$*$(IzYXROY-fZ6qy&Mr3`Lwxl}81>*hAq-;P8 z^*T17R$ybswB=B#Fd^MBW5SXG%^4?WSmOrG=I`h*?w>O~fk!hR(5Ur1l@h2gNZ%+> zElZ&1|FKY@sr=M73W4fXMhi6huA~|HJbfUrYdt5XgD9pt&j>W6FXd#>Hyzv4utng+ zx<yyOeCEO7`>I6QG)=KPd~E`g5K z`h-AESJ~PCfveU?1$00DYW5p8Pb)cgnXCrS_pH#9hyY!O+iFI5$DyO6??VN1H5ggUg zk7Lxr^!gp!H%z-AZHkU{be>W7$90^*Nm{C~SAID*Q)F@_*1%j8wlH;6tRB|UjLjM{ z>nqgfvm8y7d@8gDLpp|)LfSdQ8zN{_WFFNqsv^^v3+t*1OFhOguHjRR+Z~fJ!gin( z-|9Gp#{@Qy^o@=U^kp)q&t^~dji&pKX3_%t*Dq*GxxI>AN~v;2$EOw3rlH}nWp?W3 zvpPPfZd&?>2S+mLvGhuLahC-_U`JKnn)Qv`1tK)6|4l9xED)xul2SYYGp;~w=_tTvle!>h*ma1U zrJN6{hH69&D8kinQQ-bNhHiBo)!~6m>!wV5Qk7DHWRxUj_SJ=Og)8eZjY}FH7r1*l zd$Tj1FAF+maG9n!D*0N&Of#M22%Du(_erBb-COabjxXRTb_M3dp!7T=&tzCx+DNS$ zYy-ZCFKhS`!4}9`$xO#Hc$P>nD*hII)>@hG5sS|8I($W-cgRWjVarMs9nUk_i4#+f zo2c%igG=3$f#G1XuMW?%4E2Y>noJZ_g)}YGXMO8c5xb(}MSP6_^32OLgn=BW!#5Z> ziVTP;DM-9sjrf*oAKzY4v=~thF9~d|@Md8B(UNIRN>}x`@96lh@|Z@C4Y4sd;QP3) zVRmH)}5zASKGr7NPUR$1uE4!(*Xs=?*iI{b*bCwdbNxQZX^_z7Mk2#sP<+LHq8 z2CLOeRkMpU4vO>7bo?B1WJ#6ptWKn%lKo31`&X+(u4}=PNcHk{9ludts`H)DJmxtA zGH~aLv^q=Ho;H}pB1b3`3^kPo)lhoba|VGO%z5=RHCvjRGB4HPO`>s(V-ibFK&VF9 zkpYgl?2jbt52s-j%R1a<7+2FWJF>wDdfZea`pIU52BX^0A3_6K^Vo_~}F!KfUP2QS>l~ zdy&OHoaGcY!6I-T2XGM&;R#Z_fD~)gLA=cA=oK8stDH=3@YNd}Uf#knypQAfGdcVf z599B61plCnf0En3FeWx|Mrgvg*uf^;gEIjRPKME3!hujyKhJ2_kiww!8vb4DLXNu_ zb^Q}2A*uHOwqOc*qUj?0dbm4ByBm!k5O^C-h?*^#TPStU#XwaHupz5Lpoh1SD1lpeiYKa;?B%NHV$E;d;8OYYxr(Q;^3%80csjrO>6JB} V*3i33zyjXks%GU@4o2^y{(ongVRZli diff --git a/fr.inria.diverse.cloning.materialgenerator/pom.xml b/fr.inria.diverse.cloning.materialgenerator/pom.xml new file mode 100644 index 0000000..fe0d8d7 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + fr.inria.diverse.cloning + fr.inria.diverse.cloning.materialgenerator + 0.1.0-SNAPSHOT + eclipse-plugin + + + + fr.inria.diverse.cloning + parent + 0.1.0-SNAPSHOT + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/pom.xml~ b/fr.inria.diverse.cloning.materialgenerator/pom.xml~ new file mode 100644 index 0000000..db608f9 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/pom.xml~ @@ -0,0 +1,19 @@ + + + 4.0.0 + fr.inria.diverse.cloning + fr.inria.diverse.cloning.materialgenerator + 0.1.0-SNAPSHOT + eclipse-plugin + + + + fr.inria.diverse.cloning + parent + 0.1.0-SNAPSHOT + ../fr.inria.diverse.cloning.master/pom.xml + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.java index 10d4013..6c3bcc2 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/CloningMaterialClassGenerator.java @@ -5,12 +5,12 @@ import java.io.IOException; import java.io.PrintStream; import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.EcoreUtil.Copier; import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; import fr.inria.diverse.cloning.materialgenerator.util.CodeGeneration; import fr.inria.diverse.cloning.runtime.common.CloningMaterial; import fr.inria.diverse.cloning.runtime.common.MetamodelTags; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; public class CloningMaterialClassGenerator { /** @@ -44,8 +44,9 @@ public class CloningMaterialClassGenerator { // Imports not metamodel dependent imports += "import " + CloningMaterial.class.getCanonicalName() + ";\n"; - imports += "import " + LooseCopier.class.getCanonicalName() + ";\n"; + //imports += "import " + LooseCopier.class.getCanonicalName() + ";\n"; imports += "import " + MetamodelTags.class.getCanonicalName() + ";\n"; + imports += "import " + Copier.class.getCanonicalName() + ";\n"; // Class declaration String classdef = "public class " + className + " implements " + CloningMaterial.class.getSimpleName() @@ -75,8 +76,11 @@ public class CloningMaterialClassGenerator { // createLightCopier method declaration String copierClassName = CodeGeneration.firstCharUp(tagger.getMetamodelName() + tagger.getCloningName() + Constants.COPIER_SUFFIX); - classdef += "public " + LooseCopier.class.getSimpleName() + " createLightCopier() {\n"; - classdef += "return new " + copierClassName + "();"; + classdef += "public " + Copier.class.getSimpleName() + " createCopier() {\n"; + if (tagger.mayTagClassesPartShareable()) + classdef += "return new " + copierClassName + "();"; + else + classdef += "return new Copier ();"; // end createLightCopier method declaration classdef += "}\n"; diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/Constants.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/Constants.java index b711290..10be0dd 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/Constants.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/Constants.java @@ -2,7 +2,7 @@ package fr.inria.diverse.cloning.materialgenerator.generators; public class Constants { - public static final String COPIER_SUFFIX = "LightCopier"; + public static final String COPIER_SUFFIX = "Copier"; public static final String TAGS_SUFFIX = "Tags"; public static final String CLONING_MATERIAL__SUFFIX = "CloningMaterial"; public static final String METRICS__SUFFIX = "Metrics"; diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.java index 0f62b6a..66441b0 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.java @@ -544,7 +544,8 @@ public class EMFImpl2PImpl { File outputDir = new File(srcOutputFolder + "/" + generateFullyQualifiedName(pack, "/")); // Generating the copier - LightCopierGenerator.generate(tagger.getMetamodel(),generateFullyQualifiedName(pack), outputDir, tagger); + if (tagger.mayTagClassesPartShareable()) + LightCopierGenerator.generate(tagger.getMetamodel(),generateFullyQualifiedName(pack), outputDir, tagger); //generateCopierClass(tagger.getMetamodel(),generateFullyQualifiedName(pack), outputDir, tagger); diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java index 5e1368a..12f60af 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java @@ -3,6 +3,8 @@ package fr.inria.diverse.cloning.materialgenerator.start; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Set; import org.eclipse.core.resources.IResource; @@ -26,8 +28,10 @@ import fr.inria.diverse.cloning.materialgenerator.generators.EMFCodeGenerator.EM import fr.inria.diverse.cloning.materialgenerator.generators.EMFImpl2PImpl; import fr.inria.diverse.cloning.materialgenerator.generators.ManifestEditor; import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepTagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.MutClassesOnlyTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepCloningTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareFieldsOnlyTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareAllTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.ShareObjOnlyTagger; import fr.inria.diverse.cloning.runtime.util.Log; public class Start { @@ -54,9 +58,10 @@ public class Start { rs.getResource(URI.createFileURI(f.getAbsolutePath()), true); // Tagging - Tagger tagger = new MutClassesOnlyTagger(rs, metamodelName); - Tagger tagger2 = new DeepTagger(rs, metamodelName); - + Collection taggers = Arrays.asList(new DeepCloningTagger(rs, metamodelName), + new ShareFieldsOnlyTagger(rs, metamodelName), new ShareObjOnlyTagger(rs, metamodelName), + new ShareAllTagger(rs, metamodelName)); + // Discovering the model from the project DiscoverJavaModelFromJavaProject discoverer = new DiscoverJavaModelFromJavaProject(); @@ -73,21 +78,30 @@ public class Start { String srcOutputFolder = new File(emfProjectFolder, "src").getAbsolutePath(); // Calling the partial implementations transformer with one tagger - Model originalModel = new EMFImpl2PImpl(javaModel, tagger, true).transform2PImpl(srcOutputFolder); - new EMFImpl2PImpl(originalModel, tagger2, true).transform2PImpl(srcOutputFolder); - - // Generating the code from the obtained model - GenerateJavaExtended javaGenerator = new GenerateJavaExtended(javaModel, new File(srcOutputFolder), - new ArrayList()); - javaGenerator.doGenerate(null); - - // Generating the code from the obtained model - GenerateJavaExtended javaGenerator2 = new GenerateJavaExtended(originalModel, new File(srcOutputFolder), - new ArrayList()); - javaGenerator2.doGenerate(null); + Model brandNew; + Model toProcess = javaModel; + for (Tagger t : taggers) { + brandNew = new EMFImpl2PImpl(toProcess, t, true).transform2PImpl(srcOutputFolder); + GenerateJavaExtended javaGenerator = new GenerateJavaExtended(toProcess, new File(srcOutputFolder), + new ArrayList()); + javaGenerator.doGenerate(null); + toProcess = brandNew; + } + + //new EMFImpl2PImpl(originalModel, tagger2, true).transform2PImpl(srcOutputFolder); + +// // Generating the code from the obtained model +// GenerateJavaExtended javaGenerator = new GenerateJavaExtended(javaModel, new File(srcOutputFolder), +// new ArrayList()); +// javaGenerator.doGenerate(null); +// +// // Generating the code from the obtained model +// GenerateJavaExtended javaGenerator2 = new GenerateJavaExtended(originalModel, new File(srcOutputFolder), +// new ArrayList()); +// javaGenerator2.doGenerate(null); // Adding a dependency in the manifest - ManifestEditor manEdit= new ManifestEditor(javaProject.getProject()); + ManifestEditor manEdit = new ManifestEditor(javaProject.getProject()); manEdit.addDependency("fr.inria.diverse.cloning.runtime"); manEdit.save(); @@ -109,5 +123,4 @@ public class Start { e.printStackTrace(); } } - } diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.java index 4501db0..12a5679 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.java @@ -11,6 +11,8 @@ public interface Tagger { public abstract void recomputeTags(); public abstract boolean mayTagClassesShareable(); + + public abstract boolean mayTagClassesPartShareable(); public abstract String getSuffix(); diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/AbstractTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/AbstractTagger.java index 7245917..f6d4fc1 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/AbstractTagger.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/AbstractTagger.java @@ -62,12 +62,6 @@ public abstract class AbstractTagger implements Tagger { return f.getName().endsWith("_m"); } - /* - * protected static Set findAllLoadedClasses() { Set allLoadedEClasses = new HashSet(); for - * (Object o : EPackage.Registry.INSTANCE.values()) { EPackage p = (EPackage) o; if (p.getNsURI() != - * "http://www.eclipse.org/emf/2002/Ecore") { for (EClassifier c : p.getEClassifiers()) { if (c instanceof EClass) - * allLoadedEClasses.add((EClass) c); } } } return allLoadedEClasses; } - */ protected enum PropertiesMutability { allMutable, someMutable, noneMutable @@ -75,28 +69,6 @@ public abstract class AbstractTagger implements Tagger { - /* - * protected static Set> findAllLoadedMetamodels() { Set> result = new - * HashSet>(); - * - * // For each loaded epackage (excepted ecore itself) for (Object o : EPackage.Registry.INSTANCE.values()) { - * EPackage p = (EPackage)o; if (p.getNsURI()!="http://www.eclipse.org/emf/2002/Ecore") { - * - * - * // We find or create the metamodel for this package Set pMetamodel = null; for (Set metamodel - * : result) { if (metamodel.contains(p.eResource())) { pMetamodel = metamodel; break; } } if (pMetamodel == null){ - * pMetamodel = new HashSet(); pMetamodel.add(p.eResource()); result.add(pMetamodel); } - * - * - * - * // We look at the content (classes) for(EClassifier c : p.getEClassifiers()) { if (c instanceof EClass) { // For - * each class, we check that it does try to access to another resource // If it does, we add the resource of the - * class to the metamodel for (EReference r : ((EClass)c).getEAllReferences()) { - * pMetamodel.add(r.getEReferenceType().eResource()); } } } } } - * - * System.out.println("Found metamodels"); return result; } - */ - @Override public ClassTag getTagOfEClass(EClass c) { if (classesTags.containsKey(c)) { diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.java new file mode 100644 index 0000000..3d3accf --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.java @@ -0,0 +1,65 @@ +package fr.inria.diverse.cloning.materialgenerator.tagger.impl; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.resource.ResourceSet; + +import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; +import fr.inria.diverse.cloning.runtime.common.ClassTag; + +public class DeepCloningTagger implements Tagger { + + protected String metamodelname; + protected ResourceSet metamodel; + + public DeepCloningTagger(ResourceSet metamodel, String metamodelname) { + this.metamodel = metamodel; + this.metamodelname = metamodelname; + } + + @Override + public void recomputeTags() { + // Nothing to do + } + + @Override + public boolean mayTagClassesShareable() { + return false; + } + + @Override + public String getSuffix() { + return "DeepCloningProxy"; + } + + @Override + public String getCloningName() { + return "DeepCloning"; + } + + @Override + public ClassTag getTagOfEClass(EClass c) { + return ClassTag.NOT_SHAREABLE; + } + + @Override + public ResourceSet getMetamodel() { + return metamodel; + } + + @Override + public boolean isPropertyShareable(EStructuralFeature property) { + return false; + } + + @Override + public String getMetamodelName() { + return metamodelname; + } + + @Override + public boolean mayTagClassesPartShareable() { + return false; + } + +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger.java similarity index 96% rename from fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java rename to fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger.java index c62a95f..8e7e0f1 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger.java @@ -21,9 +21,9 @@ import fr.inria.diverse.cloning.runtime.util.Log; * @author ebousse * */ -public class MutClassesOnlyTagger extends AbstractTagger { +public class ShareAllTagger extends AbstractTagger { - public MutClassesOnlyTagger(ResourceSet metamodel, String metamodelname) { + public ShareAllTagger(ResourceSet metamodel, String metamodelname) { super(metamodel,metamodelname); } @@ -108,11 +108,6 @@ public class MutClassesOnlyTagger extends AbstractTagger { if (tarjanLowlinks.get(v).equals(tarjanIndexes.get(v))) { //System.out.println("PLAP"); - if (v.getName().equals("Class701")) - System.out.println("zzzzzzzzz"); - - - StronglyConnectedComponent scc = new StronglyConnectedComponent(); EClass w; do { @@ -263,7 +258,7 @@ public class MutClassesOnlyTagger extends AbstractTagger { */ @Override public void recomputeTags() { - Log.info("Tagging with MutClassesOnlyTagger."); + Log.info("Tagging with ShareAllTagger."); tarjanWithTagging(classesTags.keySet()); Log.info("Computed mutabilities:"); Log.plusLevel(); @@ -290,7 +285,7 @@ public class MutClassesOnlyTagger extends AbstractTagger { */ @Override public String getSuffix() { - return "MutClassOnlyPImpl"; + return "ShareAllProxy"; } /* @@ -300,7 +295,12 @@ public class MutClassesOnlyTagger extends AbstractTagger { */ @Override public String getCloningName() { - return "MutClassOnly"; + return "ShareAll"; + } + + @Override + public boolean mayTagClassesPartShareable() { + return true; } diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareFieldsOnlyTagger.java similarity index 83% rename from fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepTagger.java rename to fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareFieldsOnlyTagger.java index e829302..d9b3725 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepTagger.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareFieldsOnlyTagger.java @@ -12,16 +12,16 @@ import org.eclipse.emf.ecore.resource.ResourceSet; import fr.inria.diverse.cloning.runtime.common.ClassTag; import fr.inria.diverse.cloning.runtime.util.Log; -public class DeepTagger extends AbstractTagger { +public class ShareFieldsOnlyTagger extends AbstractTagger { - public DeepTagger(ResourceSet metamodel, String metamodelname) { + public ShareFieldsOnlyTagger(ResourceSet metamodel, String metamodelname) { super(metamodel, metamodelname); } @Override public void recomputeTags() { - Log.info("Tagging with DeepTagger."); + Log.info("Tagging with ShareFieldsOnlyTagger."); for (Resource res : metamodel.getResources()) { for (Iterator i = res.getAllContents(); i.hasNext();) { EObject next = i.next(); @@ -65,12 +65,18 @@ public class DeepTagger extends AbstractTagger { @Override public String getSuffix() { - return "DeepPImpl"; + return "ShareFieldsOnlyProxy"; } @Override public String getCloningName() { - return "Deep"; + return "ShareFieldsOnly"; + } + + + @Override + public boolean mayTagClassesPartShareable() { + return true; } } diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.java new file mode 100644 index 0000000..70e4072 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.java @@ -0,0 +1,49 @@ +package fr.inria.diverse.cloning.materialgenerator.tagger.impl; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.resource.ResourceSet; + +import fr.inria.diverse.cloning.runtime.common.ClassTag; + +public class ShareObjOnlyTagger extends ShareAllTagger { + + public ShareObjOnlyTagger(ResourceSet metamodel, String metamodelname) { + super(metamodel, metamodelname); + } + + @Override + public String getSuffix() { + return "ShareObjOnlyProxy"; + } + + @Override + public String getCloningName() { + return "ShareObjOnly"; + } + + @Override + public ClassTag getTagOfEClass(EClass c) { + ClassTag result = super.getTagOfEClass(c); + if (result == ClassTag.PARTIALLY_SHAREABLE) + return ClassTag.NOT_SHAREABLE; + else + return result; + } + + @Override + public boolean isPropertyShareable(EStructuralFeature property) { + return false; + } + + @Override + public boolean mayTagClassesShareable() { + return super.mayTagClassesShareable(); + } + + @Override + public boolean mayTagClassesPartShareable() { + return false; + } + +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.java deleted file mode 100644 index 9ff45b3..0000000 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/WeakMutClassesOnlyTagger.java +++ /dev/null @@ -1,141 +0,0 @@ -package fr.inria.diverse.cloning.materialgenerator.tagger.impl; - -import org.eclipse.emf.ecore.EAttribute; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.resource.ResourceSet; - -import fr.inria.diverse.cloning.runtime.common.ClassTag; -import fr.inria.diverse.cloning.runtime.util.EcoreHelper; -import fr.inria.diverse.cloning.runtime.util.EcoreHelper.NoSingleRootException; - - - -public class WeakMutClassesOnlyTagger extends AbstractTagger { - - public WeakMutClassesOnlyTagger(ResourceSet metamodel, String metamodelname) { - super(metamodel, metamodelname); - } - - - /** - * Tags a containment tree of EClasses. - * - * @param root - * The root EClass of the containment tree. - * @return True if this (sub)tree has a mutable. Required for the recursive calls. - * @throws NoSingleRootException - */ - private boolean treeTagging(EClass root) throws NoSingleRootException { - - boolean hasMutables = false; - boolean hasReadonlys = false; - - // For each property - for (EStructuralFeature prop : root.getEAllStructuralFeatures()) { - - // We check if it was designed mutable ("_m"), in which case we're done - // (BUT need to call recursivement if containment) - if (isPropertyDesignedMutable(prop)) { - hasMutables = true; - propertiesTags.put(prop, true); - if (prop instanceof EReference) { - EReference ref = (EReference) prop; - if (ref.isContainment()) { - treeTagging(ref.getEReferenceType()); - } - } - } - - // Else - else { - - // If it is a containment - if (prop instanceof EReference) { - EReference ref = (EReference) prop; - if (ref.isContainment()) { - if (treeTagging(ref.getEReferenceType())) { - hasMutables = true; - propertiesTags.put(prop, true); - } else { - hasReadonlys = true; - propertiesTags.put(prop, false); - } - - } else { - hasReadonlys = true; - propertiesTags.put(prop, false); - } - } - - // If it is an attribute, must be readonly - else if (prop instanceof EAttribute) { - hasReadonlys = true; - propertiesTags.put(prop, false); - } - - } - - } - - // After analyzing the class, if all settled, we tag it - if (hasMutables && hasReadonlys) - classesTags.put(root, ClassTag.PARTIALLY_SHAREABLE); - else if (hasMutables && !hasReadonlys) - classesTags.put(root, ClassTag.NOT_SHAREABLE); - else - classesTags.put(root, ClassTag.COMPLETELY_SHAREABLE); - - return hasMutables; - /* - * // Is this class mutable or can reach a mutable through containment ? // At first, false boolean hasMutable = - * false; - * - * // We first make recursive calls looking for mutables at lower levels // If some contained classes are - * mutable, we change hasMutable for (EReference cont : root.getEAllContainments()) { hasMutable = hasMutable || - * treeTagging(cont.getEReferenceType()); } - * - * // Then depending on the local attributes, we tag the current class PropertiesMutability localMut = - * findLocalMutability(root); switch (localMut) { case someMutable: hasMutable = true; classesTags.put(root, - * ClassTag.partiallyMutable); break; case allMutable: hasMutable = true; classesTags.put(root, - * ClassTag.completelyMutable); break; case noneMutable: // if (hasMutable) // classesTags.put(root, - * ClassTag.canReachMutable); // else classesTags.put(root, ClassTag.completelyReadonly); break; } - * - * // And we return true if the class is considered mutable return hasMutable; - */ - - } - - @Override - public void recomputeTags() { - try { - treeTagging(EcoreHelper.findRoot(this.classesTags.keySet())); - } catch (NoSingleRootException e) { - System.out.println(e.getMessage()); - System.out.println("No tagging possible for WeakMutClassesOnlyMetamodelTagger."); - } - System.out.println("Computed mutabilities:"); - if (classesTags.size() == 0) - System.out.println("No mutable class!"); - for (EClass c : classesTags.keySet()) { - System.out.println(c.getName() + " : " + classesTags.get(c)); - } - } - - @Override - public boolean mayTagClassesShareable() { - return true; - } - - @Override - public String getSuffix() { - return "TreeMutClassOnlyPImpl"; - } - - @Override - public String getCloningName() { - return "TreeMutClassOnly"; - } - -} diff --git a/fr.inria.diverse.cloning.materialgenerator/target/MANIFEST.MF b/fr.inria.diverse.cloning.materialgenerator/target/MANIFEST.MF new file mode 100644 index 0000000..78a1dda --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/target/MANIFEST.MF @@ -0,0 +1,30 @@ +Manifest-Version: 1.0 +Export-Package: fr.inria.diverse.cloning.materialgenerator.generators, + fr.inria.diverse.cloning.materialgenerator.metrics,fr.inria.diverse.c + loning.materialgenerator.tagger,fr.inria.diverse.cloning.materialgene + rator.tagger.impl,fr.inria.diverse.cloning.materialgenerator.util +Require-Bundle: org.eclipse.core.runtime,org.eclipse.gmt.modisco.java. + generation;bundle-version="0.11.1",org.eclipse.emf.common,org.eclipse + .emf.ecore;bundle-version="2.9.1",org.eclipse.modisco.java.discoverer + ;bundle-version="0.11.1",org.eclipse.modisco.infra.discovery.core;bun + dle-version="0.11.1",org.eclipse.core.resources;bundle-version="3.8.1 + 01",org.eclipse.jdt.core;bundle-version="3.9.1",org.eclipse.equinox.r + egistry,org.eclipse.gmt.modisco.java;bundle-version="0.11.1",org.ecli + pse.emf.ecore.xmi;bundle-version="2.9.1",org.eclipse.gmf.runtime.emf. + core;bundle-version="1.7.0",fr.inria.diverse.cloning.runtime;bundle-v + ersion="0.1.0",org.eclipse.emf.codegen;bundle-version="2.9.0",org.ecl + ipse.emf.codegen.ecore;bundle-version="2.9.1",org.eclipse.jface.text; + bundle-version="3.8.101",org.eclipse.ui;bundle-version="3.105.0",org. + eclipse.core.variables;bundle-version="3.2.700",org.eclipse.debug.cor + e;bundle-version="3.8.0",org.eclipse.jdt.launching;bundle-version="3. + 7.0",org.eclipse.debug.ui;bundle-version="3.9.0",org.eclipse.jdt.debu + g.ui;bundle-version="3.6.200",org.eclipse.ui.ide;bundle-version="3.9. + 1",org.eclipse.ui.console +Bundle-ClassPath: .,lib/jopt-simple-4.6.jar +Bundle-Version: 0.1.0.201404010852 +Bundle-Name: CloningMaterialGenerator +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: fr.inria.diverse.cloning.materialgenerator;single + ton:=true +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 + diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/application/Application.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/application/Application.class new file mode 100644 index 0000000000000000000000000000000000000000..8f74d7db74c74bde85702f31069401c5dce1fb30 GIT binary patch literal 5350 zcmbtY33yaj75;BX@`lMH2}7X{rR}sVO~^8oDlHib4PgsSNF*3Ys=&rr5KqOOjRNzUng<1{yUdvMV;<^sXz&R%^u$wgS0*_ktv$v_LJ9*1(OE63RyE)ZB$ zTvK>chb4G|h6@E+&O@J$AeIW~W76rg#xhBna_EAEO`aJUC!PrR8tI4+%NV4R2(}y6 zm|cfU5Ylj|zyjBz{Bj+a;c|w9QUz8ul^?0XDK)I%!EPv7JK$IZQbfZlfeR0qX~&Ky z(+L^wb3M^-5N(zpD^ce|GkqkZrX{z<6VmpfMWA`lxD2^-p;0v%ib*?a#YZSI<;L+KGYuO^%jo7zJQ0&t#E&a+m4>wf%Vt}r z?Y6LFZy7ZiZFRl%g#< zwqhIe*&N+-B+WF9ll3fG8Uq&P?XSW z_uR$Fd}e4N$?8qb;Ll4zC&(g`bL?%jC(Q4 z-a-X(Do}O8<(Zzi?T{RpB@2s_I}Ce#KstVmBCgo~fI!d#k-MqOOe7d%GHIlFP}!Bx zkwl7#?`l`dTmFagk|O1vEUn{aSY*3#gK4q!oV$npaBxUNhG|{O(2BOgmbA@`6_s{) zcYf5L$c)8PI&Q(?96|3jt%G*jh|*Wh8U7v-#l1{7vh+P7YVE^H$Cs5aPgQrUW}IrEJ>I~%uC}fF5SDOLSXmwBAj!% z=Yno!DUmgsqH>uLW#Sz=UWS(wJS=p(O_Rm0ZLWb)%PHfPc(sOC3ACS|b{%&re=EI; zO6u@hyiUVi1jcM~3aC)Zb-W&LVA-Sy?{os|D+OaNj^Rn(gtusTGchxp1)e4yZ^hl@ zc~)QP5YB6whKDPtDFnze$Cw~?FFQ*%lFVGC?(I6>fp=0$)RJT`f&G<&Tm(yn7@oJz zdvv@T?;)p~X-U#(ucYzZR{QZj+^gaJGZOMZ%n7@Q+(~ZhA{(fKeL!GmCFy17nStDb zux=&IJ2QFeJ{;F@zreclXl~sOHawvESRIY{kiZTPATF1ZXDcwmG@n+sX1IB9K0bm8 z4cX}x?uhNkq>dAqB%PWW=F{RF<&c2-*$g@)5NRYyYE!BuRHdMVH@v3HhmWx&bf-w@ z@mPpuM77NwAwN#yc0W$xlNvrjo-Qjeg-%+>r&MyO%;+WRj4?JRC-E5_pT*}0H&#rU zim6nuK!;^h#ZK@f9@O!WlI(NL925HSMLewGOZkp|`Z0BUSuv!>>YQ>CDb=QaRma!x z2wO3CZih^y`v}8)h2!?VjFZmf-K5-HgVQ>`fp1dI)_vW3ZtT0B%1W&4=Cxytohsi) zb5{_aY+4M@b??gGSeOm!EOs}=1e&RN<@mMGv0)aPdMwNYIv zXCjiTYI8QR6&)^g&|XnmGtJGpnpBqFC1s4#hy}MtWnG-hX6~p{HhDBaa-O!Ua(2>G zlIgN?UlkIBVwX(6K(l4^F40$%?^D6tFx^=jDWYZ8l_hx{QLC4pWA$qFGE@>A)fQIJ zc4^5H#;?MP1thxYL0)#SU2TD;!0IeovsjbGxb5{nU{`TPe}08}S<@ES9oSQRImn%AzP2r}FEGsc4y}!%pW5LI`hwM2+|)6D z3Zp~8`4brL@N=#vi-V`o*-^)Ftvep<&^gw!FxM?O0ecEZhNjRt6s!w8eFD$S;yDwz zZ4xi2LPtGcPvWIylln=#LSPcF;cP>&VP3VE#2c#-YzWqK^tO2%@%gSQK2PAi9gRVM zP!BdPru+}ygH;{ATdHg<>tfgB1iwP^`vx@jc=#B7FEhe!$c0qx>IoR72Yy z!H+nqrDYG|#~f+2?=JiVKP5Jgv6*eg&j_tMaT|V)U%*d`52F{qL>=u;(28HtH(5mS zYy5^5ou>U~@LSq*hM!M;mzBA*7jX^DpA8dhrfXW^fkK6N=A^6x^bwQ!qCH8C^I S_Lrm?$=pk`|8Qv)9{(@Z9!}(Jz zExp%X?9E=VtyOD_y;^LWsI=C$`b(duzxo&S59nV|`<^qin`{`KmOf8^ne)v#-~D^P z@0`E=>#er|+>7@Nqy)yMgR+#uyPg#KkIL=|8i4sw{1P4m*<{WyI zNi*~#i7d9_E(2wO-Pe)sM(DU@)dg|uIKG#|-MB|!*|ZbX!~TRD{Z4g>cIU&EESQZm_*uX<9_d=k0s^xIJ*#-T!$I-}vq~K-XQGsp$t+`eMsp=SbOki{J6w#0v zPy=P0;Mmyj*Blv`c!C+OH6~rBVpY_vWpZp5*JA9htV%DeTPlP~4pYk8eHdy!*q(MhD-Dl#Ir!1r_bfx0C-E3RLc8N7fO4g9Em+Mcb4 zvYNw7c$q3?z$&eY#su4VQ5VwGD@5QR8>e1(=#&-u)|tQ|D5zZB{#Nt$Z^7-SEd2T` zUd7K1{A^Kk4~`BzRgtw&&#qtSYh3r}SjaX$7T6Wu7ny4F{t)Q7p6fGi$9N)m`tr$N zJ@{zBZ-li*xZh#OD_SAzE0%?04S914^#1SHEludgQ~gA|C{*a`M*rE!yt1c|rDl|} z7mp@RT2l*8NjBojitgz}(t<(@by}2AzDAboJPzA6{rEBPCxK1LlOyTJ{$;R&`&zg&OFnX>-78pie9N223%r33&Eq!G>jmbpF<<0o z4x8S~-~NB+8sooLc5=;`zD6-SaJ} zPby0L^r=M7&m``CE^+q@+|4u9Iz`VUvV1vlw@qC#^u8JiD(Gd~lCF)ic-rXKn(C?K z8v+;6-NySIj|*9T^51DPUP7Ub<$KM8w%s-d3(b1Bb_+(qBs{rf^fHI%FQL1)>vjB4 zsmcGig`%HC>J=AZf9W!NZzw&GKEz?4hU(QhY~lA7KJeG!Hm=>c6%UZw&vl58@1xiV zA9tX^lM5)}d2HtOv=x8GUHAv?76u=t8?a5>$+ZVN#1M80m+#IO`Od~UF7-_MpN(NNb2u6n))Zk(p?x&ufxOXd+=y_Cr+gI z;IZ@o9#0>}6X|I@nLdq*o-I#vs&Ibbm-rQ9P}HySnwmGHeuK*#R*HHZzh$i5=>zy3 zPdgaDh2N9vgr9n!@n7Z~x{!Jg^LUv9bRVOZ36`Z+YPMNL`3&D=>o9k1MEfD)r?>QU)?}Y-=V$~v-%gVS;lYz Jf5o%N{2SK3K-2&L literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/Constants.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/Constants.class new file mode 100644 index 0000000000000000000000000000000000000000..d0d94a60d96fc1aa2baa737654cee1c68b8a5c39 GIT binary patch literal 592 zcmbu6%TB^j5QhK5UGCxyye00`g-*yqz%@?Oh%wwhD@}Sza&08%LIpx|T;G%4Sex=tP~II2PbePx zN?W}GP4~SZ^dBBAk$+pm!gPMsHv}Hk-y1L&aRzSfL_;o2Y0x zrqA7($Y6^hrTec^D2AL}Z&}Os4Dt*Kn~wvAs%~~WMyEAs*X>5nsGEaTQHi0X|8C!2 zE>D?u!|oZnwJxhLq}zgaaA;iWR(dkLV~C$$^hrebMe_~%e?75RrV(5Cc#3Dl58iYQGK zLxwoJ!8zi>1{aCT8@x@OEV_{59!<~|3?wh#vH!LhS)~{WfCOt4^NV*9hd3f)IHnlG F$q!VXigEw| literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator$EMFGenerationException.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator$EMFGenerationException.class new file mode 100644 index 0000000000000000000000000000000000000000..4e9bc16e721461d846ac747dbbb9a2fcb7e773f6 GIT binary patch literal 819 zcmcIi%WhLK5IvJeFA28~LQ)Epwn$whsf0ll8$jKp4QiEkQ+jt*<)kJxy75KVPQ-`s zAs`hYvET#v0e*!Q>e!@3qAX!!&zU(sJ~Q^WpI^QL*u+|d0^#^|F0{$D6sLNka;wB3 z&5SlfF_KPkJ{>Bfa_O>MTt!yw>~}lasd{-?Tj#_S=*;ZA8>qLAg9s(U?Kg5FMJieI zsz6wVox%~nzY+lx`fO~QOn8+9-q^;P~#_S0}tHjrr| zc?yiD$&x$MmT=PhuY==`szc@WFMF;xTi4rS&S5sr2db;R-Nv7f^2pDL5bqj(!A>fz zRW`y3q5E&V6Bhse?0Cp?E%Glb;2z4DVH5>)gI6AQh}jrsxiZJ7%glnWwLfFNz3~aP zkAYL?buK6gl<*i8JVAqVi@(^s-(lo6y(<48EaC1{Qv?i@+vli#U{V2I&YJsj})%zHH)e}Gj~E&zd9&@BJ} literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..19dfa59cd161ad97f967b8f54c739ad6faebcdd0 GIT binary patch literal 6978 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 NG*z-8D{IyFe*pP@2TlM0 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/EMFImpl2PImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..0a787814e26360582c0769d86e661d0623cceaa1 GIT binary patch literal 20702 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 Q1NV=mWpK}r< literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/LightCopierGenerator.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/LightCopierGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..935714d3eebbb2272f3b6dd77a95aac155219b48 GIT binary patch literal 4640 zcmc&%dvH`&8ULM|-Q2sIn?RRGyO!1kQo2bY3)EuWrO>bh*mg-ENfSVk-fYfpF5KO_ z-g_5$6p>SZy6=I#V5I{JS&7@7za{h0si9objK% zXV3Ya?{&WKcfRxFD`(CFxEU|VkQnYLS}DC^=~`-7-_I?ZrwWEy(JQ4?S#vne8zo-h zmgbmNYGP!k@_K2+$(mK2TbqM*86k$bd$s*q%Fswa&(L08a2Oib>J{Bt$Iy^$8(;`! z&0!uz10pKIXk?g^*DJicRvzM3zcyrWhFIP#XvTm>>gm5f8FEH+n<1b7-&vetP<*FI z>jTNWX_ZpEVCYqf11}e8Y+5{Jaoem}1)l2l2YuYho`UPS%Y`PzF+HI0xkE(?D+yN^(X39&6b}sUNb5l%4cv;ur+}4i$F_nau@@ z6Df4_10us^Yz;y{0=7{JIJApvLKgWyLT8r5o zlpi{klDKmi76y#uLUR5*3Ahh$m+>~bEG7j6t19ltJE-g`6xT~R&CeJa@1)b3p6@*; z1p&QV#e48xkAR4sdy3u?L+_Qm_W(qBGlscfmdliQZa_(PCV~g>0U7V7)1B>J6(7Wh zs2I0(_V(vG^ZA{7`nGiTc6DyZQ{Atgy(uDFKCI#)e1suRc2;W+-&8Y#u@=zhY~Z`nM8F^tPNRe!}Ev>jenaT;f+_PIsXu)w>~ z>Is)_v+prnn}x`{=IcUZbk;2|k?TnH>-rX=DY4>#qjuwa{m$hc)RPq3 z=&hf^rgS(S9z%{W`JM6bDRieB7_HkFy=| z=F_;BQE?wit1IH_X}n9qNxbhEPK4G(FEcN$j^jb0&37X$FNhq)qB{Ey2PzxZMCukk zMhim25ijl!2e>-WBXuA;rB8e4&(+PxzCeFtj|LKsBxopm#qWW>&S zf&_{Z^!q2MIyOo#N-xp5hajry39O{w>*&pNJvO2hIoyB}J(J3~5u<3wVXVLrbkKdW z3g_q*^OAU}&~u~#Y1W7gqo)UJ#X7bc>)9>zu-HL&+-_`SHa#EqV>5e%9t}?;$DXC{ zbGVZ|PcMLfqnrH)J<@#iN^$f_DfCOLF(3_MP%2}sbO3v#dvUjP7zODu6s7YRk)FXm z=>iPt?_DTR;papxV)P__K~%F; z`X`>E)euV3{rDxVhA}Fc_!Z6&YaEfb0!*GIb2Nh}|fgc5Ph4NI5DP4lTyB+v<5;zn8J~dOG!nfv`8)Lwc5tpc9FBLyiUZO1Am4K z5(S9^KY$;Fcx#oaNIk~VdS_iZlJ}Lt1`+2NQu4SC)smiU2M`>oX zIf%!yP>iPs%BWlxSstHSHr|j%?<-sM6U~!o)rTk0`5>n<)>%9-N0VZ^$dw!m)QUrG zqo+(YoJFn|0>MQfvArLC=XM@OCDZ zN2`>>bApvs45(oL<47G9Iy2VCjkBG5cX|@w7Vh}CEwFH&!Xd8UDw(#kNj_5R+C8Q7 z|5!Y6_xR+#;Y?ZfWhuScr%Mx2yx#j>sdKv_HbZ0scWgUR#_~u2~`eyrPXph z0a|U>5f|ZVAmI5$TCeCkT(kG+7-8@6G3I(d(E3^eJNyUb1-=xYus}cLMZ$3zi`<2i zfrx9gJ$lzm(r2_Bs^0sCx$n67g?0swtyacApJA$>FjZNyL*2zPcMmJLhX=G=p^l5+ EUzLIR5C8xG literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.class new file mode 100644 index 0000000000000000000000000000000000000000..5926cfc808af9a17608e1fa40e418637280ca56b GIT binary patch literal 4600 zcmb_f`+pSG760C3lG!W+k%a&&5fB38wX8ghm<1sTS&d{9B_Wt-rIXDN1~$84W;Q}? zt%}u(wc58pU-o5dU(m`1OiSO|_CIPXZNGPBb}}IwegZzp&fYoq+;hI)?>YD6pa1>v zCV<`ehl(nJLno}HnYTo+GXyr@ahtT^o=AC*z`A}nh@xZWlBaYl2$NQ|`^>!QJR;ECd`G9{ zSXxE|qP=Ic#0@ckeBXtm1tDy$9Q9i{r+>7-B^^=BEhS@`-sk!Bjp}TlUXZLAP5mB*GU`=H} zmf?PEQL$NI)8f$QiIE;PG-0d2GKSMr$U8>fu^BEy3Bbrt7o8!;GW4lb6dSNzrq)a{ znk$-k`L=4PLzG$en|WiPI5loq!}_@7Jl0>x>bVh}+T(YBQE^V1JT~2bH{?n+EY~L{ z4jI!%e!|FS&j~d6vAXhQE-Zjl%ZQ|7mxd&E3v91o;pMk*4^=Y}avWQ1qv9b_w2+rB zhi8r#9m8%K(5H+D9u`<}#5hwlEhEug%unQ~nhvBSv=2y-_iK0r2Lx8SDlzl(4g?y@ zV9!b2 z8X}?8n~`c6i{M!X+Ai7nv<4mHYy~VMfxY2Pezu_?E9CDlNyym1*{m3Zb;c8oz(#NL zlFYFdEKg_U9m|ItJ$pK%Py4kOv3(sxa7qBOC~_K3VoKoQaIik4pkRMU5>7EzvTM`4WGx0tajVcEyq4)IwzNCBV$sHFH1F^ zm$f;zxK_%Vi{J}HBDLV8F1)7Ui+G)+QXhUjE)dDmC@)S$pf2!E{f)_P#TJuwc==1P zD`d|trhUjb!9L9*5+;B8xE5?v@uqA@U)S&re3NQo*O+fN0y`>5#7CflCfS;mJQ*h5 zmN8YBG2DbD-NH&Z!#6XAqwRi z+f&RDLuV(B-~&21I-E}Im3~XI<;_HK6)6=rc;nuU3%6-!6xT5)FR$MT9B;lmx45Tn z<{D0ixk`j@YWM^GD62L+we-&8(-#_A#>Og)RsQ@YXVXcJs&)9mw%88(@|?eWa=LBH3RPtPV}jHSr}%1A z$+3}7RdV8UKRH(MQ+DZP(73*w-)i}}0{0-s=TlJl4cOK?i&d>{*RZCQPwTFsv2_j` zMq58X;|**Qn8mhhXt_$uDzx$U8lD8sf(o{BblZlNXy#K3+TC}qMwd(Sqxq6@A>d;Ozn*FtfF`o6EJwrTHa?TxTeqxNO09H98}Sv zqVGTSE_g@#c;PT@q+se=+hQj3KYcs=k5fH|-2gUuhCu*z$h+`!GYW110@FC-6OpC0 zO2?Od9AZ`pPNrSr{Mq~e^l2WU5C~~nqL|DAm<0A7)jcBMz+KS2>;d^W+y$$k{ZEw_Pzw3!b2F96CDT9XNdC%(|#5Xj^j&Y;1aQyl7Gxg zJAmmjF5nGs2IuQlm|G6%xd}p>SdDD=-1k*cu#m8R6QW@Mp%kfnE78_^S)V-&~I$;bS-7DqgtWzYaE;zoYK|X6bzC literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/PImplGenerator.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/PImplGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..6cb40d311ba3d344addc2d8b207143bcaf8f30b6 GIT binary patch literal 5687 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 Ui&aie2B(*~h`?XDX9fQDU*PwWm;e9( literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/TagsGenerator.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/generators/TagsGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..d5071cbeecfd512c1bdf74c19b2089f4b8da4471 GIT binary patch literal 7065 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.class new file mode 100644 index 0000000000000000000000000000000000000000..064a91c7bc21ec1caeff10c522a0f84dd5ea394b GIT binary patch literal 3664 zcmdT_U2_vv7=BKgc9S%u*g|cg&{DqAma>Yz)(gigFTC^4Yk!FK+0AC@M*>zHXG~`H?4CX6-RFIt=Y7wwfByIr zfHSzOARsWgY^jE68JfCe+?Q5Gs(P_(8fHN)X}08iu^>%pX?EFCOVYLsy`oOlR?OBO z6$Ax#-_!1EYEk39?BYGC+X8J9hH2QB1X|)l3j)EZ@{)|81>q=K(I(K5HcXkRmKLQo zuPqj(KxewFYsCePU*)qm8MIf7iojI*wSguC`t)*XwQ9@!ie^dYBU44KQjwLMW*cPz zBc3i>1y$-rW0g$E(lYPMmQ*cSDOW9BsyXi_FYUxm5ZPLxAT4#?9TG#+5xjve1)Tz? zo91OzP1`6*wQ3thHR<4(k;PSMMX?8a1)|G_xs>!05V*J_>_cf+FgLW5OFP~~uYw+d zU7KD+u@CzNLI%CyctD^#zHx8Ln`eLn=vQ!%D!vF%e;dUB4$%Up{FKJnQ;)F0E(ryP zDNkeeYe}}_D2^*QCUCwfW!pWwiTEhu7!rsTq)jEV%eBA)xn|te79@t6OI;U<#wwLf zmInRA*oiPkFsk5$z^SHao9vC^BvjHgm7SeSC+Cyt+aKm6stEbc`hQM*}3#m%E$j-aue`U@pv*>NZ>r(9)#7q<^ zTxTuP$jQ8IRdu^+X~k<&<0#oJkFvzJrsp}d)=knz#VPudh!}$de7D;-&CHLV?kyCATe~gyYjrpFN)rf&KN#24u0_ta2%J-o`{T)O4fZ zr_OmwGzgk98;Lh9&5B_^6gcy;oqjma=>D!q-aT8c8O|BlwfS&8=`>Ru0)5Ow8))Ml zPfuPIKB*i9$JXKR5&Did0Ytn-Ks*0Hw6=ibEDY&fQXiE#(IRG3diphT=->ZK!-+jco zpJ@At^8oWbNR<7|YJiygn8V->@=gB3e6Q8>6$|9caloVP`rh5BuOsa{0&BQI@xxDX zwm0mFpBWEr6#qF$M9)ZXXbp1#oQ>>_eC_*yTU;Of;ydD-&5jtO13_H_)U=hk^;6La z@^XdO3^lxk%ec!Yo%1EWe?Yz*^fRu}ANlTh&L!*~pRWJh{%2>oobh zh0mGQ7kGaI=Z}5PAN!nt=~v_z+c?i)Z$r*+qO~FCCmVA<(17!GwvS+4Af^_^o!5|n z?dw01;3G<)QG!KEpi_b+N+2mgfrPJ60)w-X5-d^zlM<9E!6*L@2?V|3oHrl*1x#{W AH2?qr literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.class new file mode 100644 index 0000000000000000000000000000000000000000..b66ba3a28dcdcc190bf9496cc128e01d07b09930 GIT binary patch literal 1241 zcmbtT%Tg0T6g?dRA#nf=f+C`V0!dIu%Vm5a2$iZ7MTxMrnxPXKCo`#@9^|upEU;Yo z0e+O_=?M?T*MeE}bl<-BoO2)j?faLn03P990Xczs%lJAnTKYSBUztStK^R9mYWp2& z742bLMaoDU8^0T-Z5{cGfz|uYP(WT_E;emn1)=UTHq|Fi+le(Yu$ztbEJ~ob-rQVm zti5S03zVCCa$owPB+rI5q^k=IEyYn{Wn{Nxn5sb(1qzGD(E~klfhWy#C??CmV;yPx zRG_a?-4e(z#XG8mK3w$RVMt)4sUx+PcD9vyEw@AE#KwUPwcG|=UFqdPpt@Ew(*mvvjGorv^KC4vES;jKq8XehI%PI+s z?s6Oio>zYFYc*4QJRo~587SYVBu))CXAtToCOq$4~o4D_%jf2E>ID2M-J6dap z82OO7UgBCJ05FC;#!=?Z>p5XGgAlIw^cd$&o;O!As1;gVRH?Rbh>6-KOrGKmXQHM^ zegj4J+hLCPypJ#)=M-<99L~ev(FK7W!>zOEbJQ|V^vXZci)7Z1# zNUtu9vh6ySQ!%QhFS%}4q$54kcRizKH!7B66v7SbP5a}}Zn;j;Y&hiu4gCUn*Q*$^ zY+E%V9`5;u9oQ6ZzEt-;v+O@L-LTG`3CCjn=M*@+V%(g&( z!QGQOB8Vpt#el%oqUFeqMztipmuAVPN3!UaO?%rUZGJZw`~3r}F0fVn-y_YDV;Gmf zA2Y@FkoRP%Q8CJ{Cyggvg3J{U89kH2d~Eq1(~|4q-f0hjy@umkRUYu%b1R;#*VkD% z)+wj5rLX*6mNk{ox`w2{bUV8a_X0_tZjND?K~<|8W>v;8Du7G)2sbpO1m@ZydIXrj zO^gX7D$>vU46xKt6}>;xCGK;X$eiC4!#LYOR`(T~v;w~^FxmxeH?yllU^0Qbm=d_c z^HrZQLx-~L3v6DjOqq_Vs6Gx$+J>1^=Y5>O3^D>kJnxn3{l&Ez&& zgc!NZ>##O0ZaTieqJ}R81_Qi?Z`nrP^UR}q0$<@id&#U9iK+mbzCqJJE2(Pd{!_raOvJy%gl}iB%jCAS6%(jllc%orVVDW?J zv}m5PH0r+T`IH4d6L^a61fs!`z*>9gOiM2r>E5urN*^vW7iXd?FyGPXJ*Jz&*I%U? zE5!|J)h=WL=^j{g*Q%jbQB^uNcPP_2VG|I$^sTj~d9uT|d$amyP&w?Hiam{s~za$8?Q({HGUcVr;sB$dyLqhfm!EMnSmh+Jdg-C@c%Nu zm?T^!$ROYQ`E^afh%vsay_<8%q2$OrT#q0dolD+|yu(BUivzQBZ*eE9slVxLEERi? z*_~s2@)q+axR;H;$Ag_z{1~~co_utIZ&G?Hn$kuFPOz#tMW8rMBhKdy^0whYx15Pi;uZn7*iv{1f3S_L&tB}~NysR$uO1tDz;s8Iw*XERM)ZM@amNz2bd z0)aU21Nc#h@g^q@z$GhLw#PGX-p-r(`Rn@+08g+Lq9V{gE~GYvR&uCkR9KQ}mK$wG za-tluJsXjsLb<$N5OdIW<3w&rT zC&f-*pxViYRENN&7$IsA0<6ZUqahHqyu)gu4ING=11h+5840WU7{m+u!L&xPeRE1X^5nC_v=_%j6C2H?}LEQd|%b!Z0E8bSV_~=8d@jd1kZ(YY#-UY5$ah*sbok*?YBb_D6@YeBy?qvSi@w~F8BQg^W_C>$88KBI-txLF!v>Fkt zKTNrZBI&*AE3MMEe0ws|ayu3yO2#mo4wSFmCt96p@Y7;1%7|Jah z%L*7yhd71Vd6aM_M1ZplrFy<#p`(o4&4zvHNG>fI7CSZ)x+h3+8c%}dTn>hpQ(;=$ zBsqdarn_QD1UBoPe=S#gEKR!A=vA!PyD+w9oRU) z8pHlH{2ro?2E%gXBpudvWS!ixI+l)f9a%$FWLW#X?uRNSTXeSNn12dq1n*aa+ literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$3.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$3.class new file mode 100644 index 0000000000000000000000000000000000000000..f1ee08c94401b0d55cbc347b492098f88931a16f GIT binary patch literal 3704 zcmcgvYj+b>6y28=rlf;l1$js@Vu6;n8K9y-5hx{KBz;J0p}xvAxlIQqGht?uqN0fJ z7a%I2tmTi;r3GXym!JILZ*sZZcP61t8wy`4Yn7SIoO|xM`|PvNnZN)2{SN?LxT#@@ zz{rGWSdM3zM%F4x&zDBVb{)&f8F@31d~WBYBRw;4J)>Y3bCzTDMh1Q5_s635mg}U= zqLY~%Hpg4KG}H@hbG@7)GqzQrTYoArWJx-KZwyIWW&$qg$(jXjBCsr&wEUJG3@5!9 z@pN;C{gz_|2Lwi27iWvM5rO(%H!GJzpi#$CEQ_HID|BdhOrWk+8LUiOj_fby$E8P@ zY$?!`b~C0uViIZoE;bRqEkl#28rOyVAu*&jjd^&Z`wA}0CMD5MAEn!pKxua zBAy|{CZ)p3#ZB9e2a_@`Gp;A&VFLYlR!&53)tkHw%PZhAQ)>2#juRLX zSWDz0jXUfXovc43gMb90f*-8Kys9)t(N)wl6}hQ62(f)t#|Tbx7ap_rE;SGQAeUwE zMs>V~*NLWEkWSd1QVP>Ib-aZ!_6Hv6sO9+qb5XRJ&ei0^Oud!!slgOzS%_qnR5s!? zGCHy#lN*)qqHPbF!KA?Enq(_Fft8m=O4*RmIanHKylMVkvn_R;!CA5}a3evO8}@yf z$ivmZW6!V3Qn?fRMx`hFm8vY@9E)4!T27cDD2ZCJKhOiSnFqxzKv7^F{Y2qZ_USVn ziXDfc-3xn7)m+xyfGL*3R7EhxY&X-0xACrqcji=Fs2np<*7m340^SqYP@eu|CCcRa zf=5}VW((}8!R}ckDWg4`H}?~;4i|NNfJ-wCdzV1ze{a~s^1KqTkMN0xj|Dc)rk5I6 zE8SDs>G)KsyT&q9KLrH2ysfI3Yt6XP)WiWaDoBB@swIy!I&olYAnIYe5ZGGfU~V6% zR2W~x-ybvUpv=4wrzjcsVs+IrK8_|{ z1)jj_$cs2c&&v0edss8N{a3{9VC_9LkKV@9_Ymi0^KCra*YOLsPNSovX~#5nb=<-3 zyCBBX=;^qJ+j-x9ri7aHh+IT7k{WuQU`UCe#Q!XjYeF?dS07x1ueMBspuQd7uRqY z-?9^ahdy2hnT(UTjxpRo1~*Z_4=CYBT;%lhcAfO z5_(ABEACcDAI)6Xj(U2~Y1vLpuQDQL;U8Sq*f#1IiOS72MgZEaV>CB-7o$goI{*C# Dw&Q!; literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$4.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$4.class new file mode 100644 index 0000000000000000000000000000000000000000..205f488fe9bd9ee53b94daaf00e46586b0f8fc92 GIT binary patch literal 1805 zcmcgt>rc~A6#rc|DQpD>f)51cG1-Gh1yRuNhEBg~ddXXqPN5z7I-xNkA91PFe zl4)|0;OIRtjf(KYN(h4?n=YJJt#w(wT&5huC0tQ(nPIyf#Zqw`71)~fjr=j^*PsI(4F(?G5G-DV{X9~}GgKHKi8kKyP*pyQ+ z!7y=_pAFLzkBMteMS`1DaT8M~5X>_i{C5aSRbg3#!8p>gg)q-Y=n(S`0NpEPq|-}G-^SdIBx`y zG9+7E9w&YRJdvWOo!eRk9wgf z{HkN9Sivg8umeS|Dn<_EN73~ckI@nX literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$5.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab$5.class new file mode 100644 index 0000000000000000000000000000000000000000..00facc06fcbeaac3d1b9c8f5c2765b607e93225b GIT binary patch literal 1962 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.class new file mode 100644 index 0000000000000000000000000000000000000000..412fc39dc34aa96ab42caa0b5c15008173aba677 GIT binary patch literal 1069 zcmcIj!EVz)5Ph4ZF-;Ajp|sEdrSy_U6)WI^6oiC=S|J%OsUk%^t(~pA$ni!SyZ?m* zR06>V@KK28IEVv1G>2YhXLn}a^UNFn`u*)EfEU>FP!SlNI%!g8lpLFL?Pgj=iA_x! z%ZbV~-;-FU+NsPsIZg7|q_SToykEqR%DAyOG0eKQ!it+C9;+{bLl}SzZTA0-J*`*y?saW9uvK|AX8lKM3d%rpdEKpl#ZM;&BPHpdcU~;?bP8jU7gd LZ{B5I1yB9}?z%3J literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..4d832509c0be37fb31c6d71bd4067696b40ad090 GIT binary patch literal 692 zcmbtSO;6iE5PcIuoEifq1^Qk3-K3S+LyxH{p{PAs^gu-=ZX0I_iySZ7Z0Mirg-eh) z@B{jzsy;iZ8hY(vXFRj>-oBaf&tF&90N&$GgqmRQ*ehFjtJT1s8$UKG%UxlMp&IF6 zn9ql%FkT1e)mc6n+CqKGoHw6sULKZ2s0(hN>T|7fP289MsmVfwhM-ktty6!i1&t53 zu;HU%sogmg)O&7VVk}`LL4>AYJ++0|pN#s(f7SimkS2AR&JQ)!FrFvt;lz#wz4X5u z=u(r;GIJIL8|`#abGLI8;|{hWYzmUan*`gqD~N_B?CTLlZnir!Xf=d`;5ox?jQe;P z;lYgo&F&IBDhXDCOWk+ldwOh|ctR<=rkrnye45}Ho(r0$7>vK!a3a{6>sx%JbHphg zb031Wo9YGeft&cO+7>1Lv$@@}AwI!X@GSGMsL^u?w6_>3dZAx_dx`j>x=v^tRkDdy zekZd6tYMuI+r$QK3Em@Fjehmr6s;-lwH{Bg^Mi>RL4Qc%ie!6MI42%}j F>)&0Rp$h;2 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/start/Start.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/start/Start.class new file mode 100644 index 0000000000000000000000000000000000000000..043c8f3d1df38f931719451a9537dae036522941 GIT binary patch literal 7187 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 Uh=pZAu?YLbk}|ft#UlCsUp^wKlmGw# literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/Tagger.class new file mode 100644 index 0000000000000000000000000000000000000000..9b90d2a610fe18cb80cad84bf5c645f1d038bc44 GIT binary patch literal 604 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepCloningTagger.class new file mode 100644 index 0000000000000000000000000000000000000000..7552e6c3a13521b00c42f5c6b6bf8697a82f5f0f GIT binary patch literal 1891 zcmb7ETTc@~6#k}L=!J6EqM`^Y+Lp^AAYy7r5KD-uKqw*67c-P;S+bXAx+U8A`4so_U5u(}`ie=*X%r%BE4Hy9ld7Yex!Qin`N~ zWuYGgi;{2&+W*?H4R?cKGt&#OokjMDA-Y9Glh81n!T?4Xv`qFW0b-p(0!g*Hl|l@0 zhT)=Ni`|BGEaV|SHocoUWo{mElAQK|G3uTgb%uAv-WBXzCA#vUBt@)R!=)ru3ZAz3 zC9SqhUayOK>6A<1Ga~jMN!+S%ON~m!xFGhKZ2QgQcu0j0^~1h&E-o2{2pDw8F4ZoM zM+^fYH{XLY?^Oz3a)yI$MerT++3q^XhV2>_b+2Ptj;(tEDRw@Ar^v+cjA5y(hF!2J zWRWAicJ~fHm3B4{3Y%|=1%~C`NieW7!&H|J3ogfyBE{Zc_dCNPsohgEj~jK;z9yu5 z87kvKS5fH!HOg*7a&ud7nnhj}JYEZ8Fyy-AFSH}61;XrA#ToAX(^~snx*=Z4lJ_9D z4b}bWP-9Tp=r^;d9y(^|&1m%XA%duSI`r#`s>eiglI#OW(KtxE59FcIJe>Q1q1@aR zMsxF582?J92yW9jMnF2IafAYlVu&nhvP}ChOyCafl!pq>yp>8Aq4izD_-W?IuFlv^ z;C|0A;RRD{l!G6P6u>0y6u)_z)mcRQtVWNLkDLr4BTeLeJP42r0a6>A`qBcO4negh zbh-m{rWHEd5&9TUf~@N_M<`wN8)jRvIS-rm&zr(UF&Er&0gFKtJ>cG#`;O7pFnWkW zUz5F#r2xDZP-vHIHALWAG9~JBEPDx8nhJyojJFba)sevJf7EOvguEue@WLz4+Fwf9 Br8@us literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger$StronglyConnectedComponent.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareAllTagger$StronglyConnectedComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..3e3b3df90e78139fedc90870aaf24b95217359d7 GIT binary patch literal 1092 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 UYD>Mu6p_PU`8UB9>Q96H3og@9`Tzg` literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepTagger.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareFieldsOnlyTagger.class similarity index 78% rename from fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/DeepTagger.class rename to fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareFieldsOnlyTagger.class index 235582d087580086d5c319802ce2b829c83595ba..46ebeaf1dc8ea1a2f3f07c45e34ff953f5657385 100644 GIT binary patch delta 317 zcmZ1}dq_^;)W2Q(7#J9g8P>5gFflUtOcXHZ56(y|N_ERj%}FWt&&#Qt=zX8b51Yi~ zbjBuG<&ebm^vt|;h4Rdj3nu%o%h-BabDFKW4GjIdhJP=tR N%?so)GC)+V1puU6R|5b5 delta 139 zcmX>kw^CN%)W2Q(7#J9g8P>8hFflSXPBvtdoE*R?$KsNjS}-x}K9jQ#iqPa*#wH<& zki_)#%)E4k^30M91(3?kGE90LT$~_gfM;$&&g6J5F-fo)j0{}C`K3k4scxA$sf-N# YASIIza)~jrZoa{#&BDsSz{Icy08BO~;Q#;t diff --git a/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.class b/fr.inria.diverse.cloning.materialgenerator/target/classes/fr/inria/diverse/cloning/materialgenerator/tagger/impl/ShareObjOnlyTagger.class new file mode 100644 index 0000000000000000000000000000000000000000..8dcc656cea08aed87f3a3bd1138f9dc29f03038b GIT binary patch literal 1680 zcmbtTT~8B16g|@xT51bI5tMHcwJn83P+w|HDk+gzC}|rKc`-womWBOjrdtAk$R{6= z7ZM-*0sbaqytBJ$7D^uo`!I87_TDr1oO|z|f4_bM*uc9eLJZptsp*!~xpt(V3E37} z-LNg)YHB8T1l=1=VF}3{TWSt(HU+txEkmmwb1BM)CuPgHsJZu1L>P(>fh!n>2gNY> zLAP}0BSRrwvSm{fbwh7aa>8toZA+m^(Y8CXF0_hoRE3i-o$xcR8JyCuI+9rAGy4pY zP5Vg15ynsg0~ll&De0Ej?U;u`*7%_z7{*F=og4d{2-DfWj5x=7o8e38A*60-lxG++ zg~Lrs$Y99bhZ{q(8)|XWO}d9J;Wvd-?KB$tIm385)2m1fPZ&mn_1ly7`31u;MQ(b< z-zEGQo-!nYex3`JsN5)S8oW)~RQi?2bI51E9C4xp1}i`f;VNuGH6^y3>)|*bq9fK=nn*qCuoJN~dkQRrk^Ca_$!a#Qn9h@Km49{C08i?L#^&R9@`}sd&2wM#SS3{Pa>+XkD+#@&p`GX fYqw!C0p z1+lKxAJ8Awb|*71iA>wo)h{ubJ<)q4aelB+w;rPQUYzm zwri_VfkdYFo3Kv{F3R=xMnw&k^|?UbaSMmP3q*b|Gt zhNWX4_LBsQ$6X~G$xNX)pGFVf(Qr_pyMY)uWLhLz$GdosZYpoCT$X;`tdNsrCLiqU z#$g>ta8y8BHJz%wy&$lcpSC-kMkkI36rTtzwtw%v7oeTe@jfyFJ1W)rN*H`#UHBWk ztd2hPGa8eQxg~*tX29Fds zByY0RYQ=OO7d2cE820={Lt2hqX7MhUlwo;Gj$^8TrW7UxPWjr*k8P*c(s+oEH9QjN|1U1-c#KczOwD6~TbV*6YxN>7 z6q+dGp)2`Z8M0)niZM%ZoYIhnrvis#-Yl4wG(y|!o>g6uu1ezxj;CQkYG9AX%$tDf zSiqt{D|^~m6By6L6VSjfY##7djv|l*ADevQ!t?)PzGUQ=~LlemGt&jfo;~)lb5~q=+*8}_?%;6j6m_>4SeaRtw@MqfsV{W-p1swQz9U*apCUu4q0 z#y4CahtjuPzoTzKc4`>kQ~H6LBS`$oP+B!~YZ%k;P=lqh!G#99pur7t`y=gI@Y7$g CO#ayb literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/target/fr.inria.diverse.cloning.materialgenerator-0.1.0-SNAPSHOT.jar b/fr.inria.diverse.cloning.materialgenerator/target/fr.inria.diverse.cloning.materialgenerator-0.1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..019c70913c754043b1bf2e64ef7b31887b788f5d GIT binary patch literal 122137 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

B0EK)D>z8{RHM=MPBa06=d&Lg^ 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 E4 + + + + + + + + + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/target/p2content.xml b/fr.inria.diverse.cloning.materialgenerator/target/p2content.xml new file mode 100644 index 0000000..e418a41 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/target/p2content.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bundle-SymbolicName: fr.inria.diverse.cloning.materialgenerator;singleton:=true Bundle-Version: 0.1.0.201404010852 + + + + + diff --git a/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF index 1635a8a..c7b8f11 100644 --- a/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF @@ -3,17 +3,16 @@ Bundle-ManifestVersion: 2 Bundle-Name: fr.inria.diverse.cloning.base Bundle-SymbolicName: fr.inria.diverse.cloning.runtime;singleton:=true Bundle-Version: 0.1.0.qualifier -Require-Bundle: org.eclipse.emf.ecore, +Require-Bundle: org.eclipse.emf.ecore;bundle-version="2.9.1", org.eclipse.emf.ecore.xmi;bundle-version="2.9.1", - org.eclipse.ui.console, - org.eclipse.jface;bundle-version="3.9.1" + org.eclipse.ui.console;bundle-version="3.5.200", + org.eclipse.jface;bundle-version="3.9.1", + org.eclipse.ui;bundle-version="3.105.0" Export-Package: fr.inria.diverse.cloning.runtime.cloner, + fr.inria.diverse.cloning.runtime.cloner.impl, fr.inria.diverse.cloning.runtime.common, fr.inria.diverse.cloning.runtime.emfextension, fr.inria.diverse.cloning.runtime.emfextension.impl, - fr.inria.diverse.cloning.runtime.impl, fr.inria.diverse.cloning.runtime.util Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: . -Import-Package: org.eclipse.ui, - org.eclipse.ui.handlers diff --git a/fr.inria.diverse.cloning.runtime/pom.xml b/fr.inria.diverse.cloning.runtime/pom.xml new file mode 100644 index 0000000..cee1da2 --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + fr.inria.diverse.cloning + fr.inria.diverse.cloning.runtime + 0.1.0-SNAPSHOT + eclipse-plugin + + + fr.inria.diverse.cloning + parent + 0.1.0-SNAPSHOT + + + + diff --git a/fr.inria.diverse.cloning.runtime/pom.xml~ b/fr.inria.diverse.cloning.runtime/pom.xml~ new file mode 100644 index 0000000..198037e --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/pom.xml~ @@ -0,0 +1,18 @@ + + + 4.0.0 + fr.inria.diverse.cloning + fr.inria.diverse.cloning.runtime + 0.1.0-SNAPSHOT + eclipse-plugin + + + fr.inria.diverse.cloning + fr.inria.diverse.cloning.master + 0.1.0-SNAPSHOT + ../fr.inria.diverse.cloning.master/pom.xml + + + + diff --git a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/Cloner.java b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/Cloner.java index 17708bb..80daf5c 100644 --- a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/Cloner.java +++ b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/Cloner.java @@ -22,8 +22,8 @@ public interface Cloner { * folder * @return The cloned model. */ - public ResourceSet clone(ResourceSet model, String folderName,boolean light); + public ResourceSet clone(ResourceSet model, String folderName);//,boolean light); - public ResourceSet clone(ResourceSet cloned, File outputFolder,boolean light); + public ResourceSet clone(ResourceSet cloned, File outputFolder);//,boolean light); } diff --git a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/impl/ClonerImpl.java b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/impl/ClonerImpl.java similarity index 87% rename from fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/impl/ClonerImpl.java rename to fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/impl/ClonerImpl.java index ff44b81..769ecf3 100644 --- a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/impl/ClonerImpl.java +++ b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/cloner/impl/ClonerImpl.java @@ -1,4 +1,4 @@ -package fr.inria.diverse.cloning.runtime.impl; +package fr.inria.diverse.cloning.runtime.cloner.impl; import java.io.File; import java.util.Iterator; @@ -15,7 +15,6 @@ import fr.inria.diverse.cloning.runtime.cloner.Cloner; import fr.inria.diverse.cloning.runtime.common.ClassTag; import fr.inria.diverse.cloning.runtime.common.CloningMaterial; import fr.inria.diverse.cloning.runtime.common.MetamodelTags; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseResource; /** @@ -33,18 +32,19 @@ public class ClonerImpl implements Cloner { cloningMaterial = cm; } - private ResourceSet clone(ResourceSet cloned, File outputFolder, String folderName, boolean light) { + private ResourceSet clone(ResourceSet cloned, File outputFolder, String folderName) {//, boolean light) { // Creating empty clone resource set ResourceSet clone = new ResourceSetImpl(); //clone.cre // Either we make a light clone, or not - Copier copier = null; + /*Copier copier = null; if (light) - copier = cloningMaterial.createLightCopier(); + copier = cloningMaterial.createCopier(); else - copier = new LooseCopier(); + copier = new LooseCopier();*/ + Copier copier = cloningMaterial.createCopier(); // Getting the tags of the metamodel MetamodelTags tags = cloningMaterial.getTags(); @@ -120,13 +120,13 @@ public class ClonerImpl implements Cloner { } @Override - public ResourceSet clone(ResourceSet cloned, File outputFolder, boolean light) { - return clone(cloned, outputFolder, "NOTHING", light); + public ResourceSet clone(ResourceSet cloned, File outputFolder) {//, boolean light) { + return clone(cloned, outputFolder, "NOTHING");//, light); } @Override - public ResourceSet clone(ResourceSet cloned, String folderName, boolean light) { - return clone(cloned, null, folderName, light); + public ResourceSet clone(ResourceSet cloned, String folderName) {//, boolean light) { + return clone(cloned, null, folderName);//, light); } } \ No newline at end of file diff --git a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/common/CloningMaterial.java b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/common/CloningMaterial.java index a4b9789..2690b8a 100644 --- a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/common/CloningMaterial.java +++ b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/common/CloningMaterial.java @@ -1,10 +1,10 @@ package fr.inria.diverse.cloning.runtime.common; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; +import org.eclipse.emf.ecore.util.EcoreUtil.Copier; public interface CloningMaterial { public MetamodelTags getTags(); - public LooseCopier createLightCopier(); + public Copier createCopier(); } diff --git a/fr.inria.diverse.cloning.runtime/target/MANIFEST.MF b/fr.inria.diverse.cloning.runtime/target/MANIFEST.MF new file mode 100644 index 0000000..855ea2f --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/target/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Export-Package: fr.inria.diverse.cloning.runtime.cloner,fr.inria.diver + se.cloning.runtime.cloner.impl,fr.inria.diverse.cloning.runtime.commo + n,fr.inria.diverse.cloning.runtime.emfextension,fr.inria.diverse.clon + ing.runtime.emfextension.impl,fr.inria.diverse.cloning.runtime.util +Require-Bundle: org.eclipse.emf.ecore;bundle-version="2.9.1",org.eclip + se.emf.ecore.xmi;bundle-version="2.9.1",org.eclipse.ui.console;bundle + -version="3.5.200",org.eclipse.jface;bundle-version="3.9.1",org.eclip + se.ui;bundle-version="3.105.0" +Bundle-ClassPath: . +Bundle-Version: 0.1.0.201404010852 +Bundle-Name: fr.inria.diverse.cloning.base +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: fr.inria.diverse.cloning.runtime;singleton:=true +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 + diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/cloner/Cloner.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/cloner/Cloner.class new file mode 100644 index 0000000000000000000000000000000000000000..61e0454baf031c995ee64a0d062fec5b7bdd704a GIT binary patch literal 375 zcmbVI%MQU%5Iuvc$Hr%{=`1WQC00!&`UO>^Zgcg@sD7M<5AadqUL@A+&YaA7dKNCMt4&?9Uh2ji-?u0)JuMoeN0?N3o3qXR(|TJ;(Ga4b z5`vwkPD_@;nv?gEO&W^U*v?tA92R<%2@d|YLvbD h2Pt9vULy(p`vgMQPYQJWI1%~?BSnZkLl^`e!zUBOb|nA+ literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/cloner/impl/ClonerImpl.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/cloner/impl/ClonerImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..453e02e846953b669c0e09fcec377c2ab33fd691 GIT binary patch literal 5295 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/ClassTag.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/ClassTag.class new file mode 100644 index 0000000000000000000000000000000000000000..3ec5c0653df5f4df8c18af0a20684478dbbde052 GIT binary patch literal 1221 zcmbVL%TC)s6g`8JI1dMCLeui-o3=@yn1|X;B1B4!ifRbLAyU*uH3=p)@}qJbB>t)m z3s9?~uKQ6{@0bAYq6^3(_L({N%sF$ffB*S@4qye#GDa8{4}8^feT%F6){*J=OtoWs zuH|-BzwZW?L)dd1&sEoL-s?4ZS4NCs^pGEM)#gOg+`hvwv0mTW(Y1!Aw>}x~Yr9(Q zt*$XF>o=9JFl4vuji^X|r?%VJtm*$sXSD6Tt=VQx-_s0+m5;YMDOv5uujknx-{MFJf60@G3O5=Dj-_kDic@xB~0l%p~0?L)H@R5l~YFPA7fgB&`mA24i0 z%Z9g8x_MJX@OcF#yb@_6$A#;#Q>_y|2Hf;o5)@wiwJEFRPch}-Fsl1)mI?ZbKS0emQN*1dVE zmtH-j_0)U9q>d~`RoGaL1T9h_HkxZ^ zHxiNCmCPZs?y`0Ip&#F5nhgXIC|^PsYo1%jg!4byulv|y^5{Ls%9)fnDI627{$ZkU qN|^0JAQVHcf@hh#F6}^ASXD%6yqOe(|^?f literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/MetamodelTags.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/common/MetamodelTags.class new file mode 100644 index 0000000000000000000000000000000000000000..1b330349f2537e9da3b6cb7a70355468535ba1a7 GIT binary patch literal 614 zcma)4O-}+b5S^m3h+hba@!-u19JB}GiK9qDf`Nc1Z^JUICEYD)yCnQI5B>mulyP>m zSuv5sOJCcWd2gn#pI`4E0MLb202KibODk1k70QL$kaZ+OZ4#A4(x!=5F`rEwn?yd7 z$Ji`LzhLA7I26!W;RdBf&K=KJ6nX)*h&;!~O99jN$k<3ysMVTTDPHp4SdveV8lCHP zM*mgL^O?0L;3~!~@A4aRvp2Mab4>yc+MQPcE#)TGtjYTAPV8=PCo^x;(5DvlfRK@T z8Ot>fQI;1{Q}oK@GJOFzoG?MVFX@)ULuWL4T9iCRUy58o)!kM3i4K#$nERAC<+lRl zzN%8FXt=DX&rE7V8mR1z;JNrm0MyvjBd9`VZUD6$kD;F937qD5R^WMo P7X>ylWTs1AE71G~K%u$= literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/ShareableEObject.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/ShareableEObject.class new file mode 100644 index 0000000000000000000000000000000000000000..7bc7cbbe67b2616489a32a8fff3320272b12d7c8 GIT binary patch literal 196 zcmZ9`I}XAy3zpZt8? z9{`ZU(n4lnUkP#)c6jEIq$BhpMUFMf5PNP3sjcYNQ|vfJEG|ySm4ObYvLWAFm>O6& zZgd!&hJM$%fo+l+$p^kFs)+7M2){uCt0E2J>BxZ$Z2sZh$5h3@L~EuWgHEeGgT))5 Cb~zOQ literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/AbstractShareableEObject$ReadonlyContext.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/AbstractShareableEObject$ReadonlyContext.class new file mode 100644 index 0000000000000000000000000000000000000000..25e8167b1d5bdb7d5d8bd7a6cdbe94ccfc616ac0 GIT binary patch literal 1404 zcmb_cTW=CU6#izRMYd~;RO_Whi&D9@9gU9~6GJpq+uvGL(}Eb57aqDL0(BG7~dl zVZ}ohu8S0|d00Z8AyuiiTwKRm1~(X9&#^!rZsHb$Di%5m!%>NDM4o)gP<-$Mphs7y^7&^P^FTbj3a+8OfA&=)~V(Av;> zbeXn;#c({&eob!_jTs9WysnHV>R6qb*yY_>BGbPmagUM>dZlbug;{&OYgd@O?rB=o zMj)a{QlcwU+m21DS&DuwDWq*1NK4xS0=b->v*d-*oOy)1N~dEu3BFLP53pSOhFop? zD^`Ev_5kZvEeufnOh5+@=$j`xpiER1YH$@BsG&qRYxE8ju!V;ttyU&y4mqh1YUqlS zWc0RB`-1gPqzow+lgpii#zsYe5e*}9n~#li(zrNn{P-Wn4(f@EZS0VAiH1?cyKw#h D?z@DV literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/AbstractShareableEObject.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/AbstractShareableEObject.class new file mode 100644 index 0000000000000000000000000000000000000000..d267c1cee9ffa3a68e606b114b53aaafbaa77fae GIT binary patch literal 6293 zcmcgwYj9j;8GgQGchBzTBx%!b+ie53(o3>wx-HrZo7!8trGZ@9q)lxB>B;6KIq6>F z*^@$1K>wOC5_}@*c?q- zMnVtki2?n7OHZbaR5ENNM&jX}eQC?oVph+PX6jmBT#t734eK#WflFX>${Y;qvA8ip zS$voGDN}b|>@bo>LW^g%w^7#0)>P8cjHGS~EZ6$`4U1ZmT0FO$?lQaebZXR$>1l!5 z_F?U~79O>Xc(_9wX%X=C7=ua88Z~u+t{b0jZ7*$#nUNRH3hvRZ7U$KtM#mjzTDDQT zXDcnXwh2@=H1-O(T2uYHAC;(9;e%h=L(@A)6MedQKms99*Pe=L@m`IH@^@y@Wepj$ zzN38(!KQV!14gnx&k2Ep4P|_8OIo@~Tr<$OG?v*{5}PUnuvoz&fmNjuEs(Ba34#ob zp0!P&sbSU{TdJ@OHz}wWSW{YEk&!BH#>WI|26Zc|k}(xnH+!v;0|FvNrDdQgaFV;L zdn_$>j6BSQSA6}k_fCQ>uEOPeh7qA+=7)fJT^q4+wU{A z1s3Mk~p z0d0_3cpIUbQF1JmNU+>>=$4jX&d24ewtbsaY{nK=2E8?|r73QCdF1UKj9CO*6_76* zKayG%p8_k8*Kwe0;J*+n>S&z3fA)U**5bns>{75(VEt^3%)YCl6}tr%wsv*wYmXj? zwjaK?XYbDL=+0g3QGr`$jdfODi-J7@cg<+V?E6w7(fo*FudLv00xvYoY~buQwalro z#$K5bi)B4*SJ8n^fhw}VPM4%b?yV}py$o~h78z|f(iRE058Vp(vq}`!)1u8PdT@a3 zHuXg6INMpEp|~+N9`VtvUKMV5s_XknCsfbBuDmhn3*}94W4AQ6cberf*CEJqr+{5%NC%&lP ztjzX;7C9AoQ`V4fMw9()d9hK`)RR_skHFe8eWXa5(|W3HDcSZVF#CSV;^w?drCux5 zYS(u5vLk#Db4shgJ#)#-!h~XNn|FixbV-6SJ=@h4hg-pMcBDc^I@4k)j1=5YH8#ug z#x!<)ZnijL+G!!X+2eDX(nY?O32T-T*?#LJ@8?x~0S^i+$TsT)*|A5@46G|l3pAG_ZnVcTM`Ik0wRlEnOCz)OQGxl> z*}7Lt4{?U^;}JY2i{j&)a~s+kdu5V8A!m&hGRdD(@l||{$uu%bh_{r;=;8=B7B9)t zds4;M@r;0)sb!h*zp*SBh0sbN&#Cx^95Q7=oKBj$Z2o0Ne4B?gIeKI?xh#7S*gSJe zlpF)7RL>NRo&8LDwvf^+F0{KX4-cnP7rmHKm`qv5z=?3DycjV}9*UUOMzX}*KGPcl zr#`ZMTSMDg{tqU~;{1Y&CajfbtM98A!}D_OB^4*|01L^0lQ3<&S=HFHeSKOwJATbC z!j$w)q~)Nu;eR&WZhYy{I2pd^#&g_>k?dJ+VWC0^601;_65V#^l#ZNH@l!l6ljk+r zR_~T~udDb4-k^zT;{mo;9xK}vyv3v3bX~KVq2QcAxR6#e#9CrDq2hvUa&+=xvWrlnaVre>v-hou@B;V40+PMsoZCPb@=FMVAtxDL75=J#mwzsK zyyr@l{iTGg)cFWslZurmX9hSMb_B%v{CmRJmVmE*R0myaUxwm34OitR zcfdV{r!FFTI7FOpk9eAFuxyMX3g5nC3Jc_A0(Ww3m_Szr4u#&t!K?6zi1##|Rd$B5Gq7Q*06K8y`GhOPYFiX`^pvqaCrQ9O)6_R{8}H*~e86HMc{D&RL^Q)Ac{jw+3+jKLT8GIxKi@fqILR^( zSCHVEix!-u4Jq#G;lMFMTRgO61SX#ZYuKS+RKYU--yyDH zqfij#z4~vc3hoOm^Zkn|U9u2of_{d-WTs3uP2rLZe5Y%ZYb|3Raf^s2=$=9#=(b~D z9dtXv=dx!C3xgg8@N*M*sDc&VQ@P0%aE)P`6U5rkMLcrYbq-&C3kSLM6^fBhn&tfj zo~)EXs&iIs7RZ%yv}hW~(~PFPT*Xpeo+WwYB|qjem7TonWwrt5=+_0N!Y`T1m-rFl zZLUr-<1Ul#R|wm?*hS!P$9w3+Z*c^_BPl*0m>)9Wzh|)jK&SqQm+&Ws_s@L$FLpTh zI#}hxIcWz+mV-$Iab#T?*s2c9|_1pJL}{GEpVgH__6d9KyxT&vG8m2&X|{LrqC_4pCFEz4{@ULp4- zbpkd7Zp!lG$6WK^Cw%VIPr3h9?iaFk-e|Sxr`0ky%mS-_MyqAjQDgy%ctyk~vp*n{ zodu{`CcCUaT=q?2UC@_D!sU`svS|D~Q%xpVkg3=k5|W1bSh(yGy$RKXlxPatFT7YH ze7ITou|iZ~olyB@sG9Yu28To~VuH0oEJR8y&dY2whnJbd%go_r=I}Cecpb~(bu@$5 z64FoB0)^i_57ycQ%aL)O6sge#dU0f-{wYuqYMBdFh?*Ur+zO@B1A+`^Ue({0874 zJ~t2(=pOenw&U4WX3UtyW0bUxGXy1wjj zr)}vOhzqp4-b6;`^7b@e=XO53p3D>jJD=%Qk5~A#CwxI*y)Wr5KTKyl@k;gu0dY>C zrpI;sz;c3ND_@kA_d7R#`SU;Dd?8@uTqhs`fpz^itQjjjcSr_Z0&9ls3C9YGo)kE^ z+AprW;HSRmfxj>#k{P-kK-)+wL1BL|CxQR!W_ zM)UMj*YD;C-y#Xlqs4eIY5M{v`~RPu1hm_e1$Tz>I)P<71?dESpXU~O@|N#k7{4%j zL*^*OzSeT|!W~_0%hlk)m!I;LClb)WR)N~Zu$;C0NrongEvTzT6LuQdA+WtnC_=0z zcA=S(keZ{w&epbatVArFbR%|xWfxQA%b|5_~a6N&I^sy*SHd^PQ`*6U(ex}k&tI5iI zj(Oj8UkE; zeA`Gh4x!t`37iyI>&sw?azxfT(l)FpoHo$|7OydB`GXoQOK60}>1bB>D3El+T#0^ZT_K@{8tB$gchXSvd<7Hsw`=q`U zNI~Ut!GxnSHDUV$mNTnPoi_0Xn1XS6Mk&?(G-s|X83R0{b@ga#?X$eWJjcrSs;;79 zHDlr?Zt((RbGmGK92xhg0a3EwSx zIbL+BGVxi-h__2J&@7a`0_UIj&9apjrHHzslS3L%pRI1+^-DfJ_NvAvU}hahdb;IH z-@vB=dsY`m1227$kZF(phT-+Ye#md47;mjgBseqltcokFEzV6nuhBMs7I0-fS2Fw+ z{H;vQq4o#8rJkcY0H{L)M>E`j4cMsdEOs6m9@nT3xzBkeZ9TtY%e6Ud8)%=$c7b{9 zRzsV>vG`qVZ;a0)Bk(&84W>KhaX5yn9ToF0NU zqM6-#HxBdp6k0T_6!+0(1WP^jqK{CkcsVG>F}}49XKr1feaaD_&Ab?O*lK@}h z+M=kTO^GU0n~h+6#~msm&!nQH_z5Gadw5x^H*go*(vf;i{iz>mQefxtI+KD1t>Rxy z$+46&61!3~gx;hx`ywNJiCHm3Jul%HhS5#ueYmb^Y$O=Ej%YL!RG1q|!CIx@W>iqY zFy5OPB6gMt_XEyU>15-b@ib#S8N(eM-~(@&J7`l&Zj4FnAFJ$0wckUrG*2{EHYUDB zqM|dtA$|wRRC~H(4zr87kfMZuMIPgnbAshGNd`6!@OC(gDI8}%KLwAWxT#s34S|$` zk;PlIslv?auqcjMysd*#!SNluOYqICocHiP3-SQ{eZZ%L&LyQuXuDmq-KI@x!oN`u Z_(i3P=0i?n_y`~KS9SRce1gxg=06GwOMU+1sBG5w*jZD?hKdAqds zP!`=plS_+srNRuhY}ed)q%C?cvuL=?t<S!8^~>z>NfgH6DN+yHf^>}v zE2vyBO4URU&f%hp7~-r{nJODqCiqaS*_lDp$@mgHHHvWsW30GC-Laop6_=pV2PNqe z#nOgA?x4!8TZ|u>pO27Q6J40Zl!D6w6GsIZo>lQ4t_Yk-EiK&9Glh(P??L|NTrM*= zuV(}bL@cp0BiF@ul1TyaS61stI&F$ zRK8d+w(32-x8DA8vSM#bkM&IzS@3=gD|GUNuC7&2xvpXXi!YQjI}0aL{=TDYuF0W- zgG0izbw|a=e)!f|@<q`V4&|qd(#0 z?|q>&e0s-$BwpcD_18TZz^mN7w&%-P?gS0KPE~Jk9l@Kv@@Kv=4z8oW;oRcL59s?D zL*qMmS6~Mt5j@4jx9A)9evIwl{WdIk%kdvEJ@$lZqVPZrkOy#`&n(s6LL9f*Zgn5j z2xYvvH~{6XlDOsrox&{U2&A3;e;z3U@gNWQTs?UYav-0ke1_{zi06naY@dSG{!Qi2 zI+gS;DmT7CZ$Rqy?{r`QeJS|TL{l9X0mmo1xDC?9K#nN$L{wn(?&2!$5%K+9{L&46 z=?1@agWt6#ex7{5&yx@Nae94@v*f1?kxPztBeWWXtAJ(h2l-tP!wS9n2~phd=;D`8 I@j0UZ0Hr6f$p8QV literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/LooseResource.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/emfextension/impl/LooseResource.class new file mode 100644 index 0000000000000000000000000000000000000000..4ec6fafa26b1b685daf6a42bbcd60b17935b0372 GIT binary patch literal 4665 zcmb_f{c{xM9sfMZB}*;~2?3F)V5mWoJIo=VBEi%U4@kWv%0)EzLN~{fTe#beyPFt9 zMOtgCwpv>)qV`p*Q>Q;zM`coHI`~s(`cL!^>5S>;d3N{iaxZfkCzF}%-t&ClUq0XO z{^z@Y{tLhX{8dAXz=P-9lx4e?kveNFnyzQ2as|h>?75V?VEb0lOqs=V=8|vPp5@pn zt2kdsWgN#dPnw>y;O0yXF@Yh+olBXyf;CS8WZ=8wnyICt6>vN;F&@#6Q-VOuH|9Kn z`!Y?{=bU1ZiYH9pC^~1&!ZaC&1$5Um3S*81c+ zMDD2ailYyA$fWlRq}PyvCK`riHEqoLM()CdF&|dR#$4X8=S-z{iJ95V=$tnejg+c# z(lPr_R-ZMCPE8(yB6q|7PDPE&a@UZc(z3=AhL@+-I0n%rOXn^fLr4j1Vy+{$tVu(M z>ZGxO8qyDU;%*$!uwNiiT_laUbR5KO1cnOTUMKFwAr1El?5Y-2gAY3H$6FrwiBwsJWX(XEaj;z8noP0SS78c8THZ>bPAG#nM!Q*BQJ$2u{J zhjiSE+cX>#*ioM?L?jI-1a{Xa87EY_wowR4JCVkZbUcgr~0{1j+p?VOb<58Ssi~~fOIwx>)ph5kG8rKdu%0lAQa0jMwO2cCU`_^h?#H-_R zJi)Y$O-($KNl&LUGiS0VMo*?kk7m*W`_~M9kvs-0jng`w#8aF;rI{&^Y#8aWY}bO0B5aPb zyx~o%&g8g0&EGk>LC8++ssYlCj-NN(2*w0z2UdfYB?t?L^QKW@hcG~VS-lBdoR7AF znbpRuBZ3o~87!h(d5H9cl~bA_a`HS?b-0cu$c#LLOFCY_i^QG_=0!CkR?o6v3S5@p z{qm~1=Y?ediH@J*6&62{MBvUk#b2k?3Co_b$Q3M}UdoyCJ{MX~!!HE3sJ^nC)c92C zM#6tp8WM>S){`7`Z|Jxad*q(?D;+<>l017$$8%U>O*w&Nimk&>@H28b)ARcG30zu_ zJz>qDRJ}q+hTOeQ3(IM_WnISY|`tVwVYY_v!hNBZ=-I9*0UwcAV8zt`~x z{E-XFf?c3$e#1lynm~6&D#DL}cvgMC9J9iuyyBZ?NJ{4_F>c$YtFYYUbmZbrnn$lL_))-iiEW>gyai>0_SZFtYYC|W|8^+DvQ#UL-k$gpJO7QY#5d@hp^-oM3OnVI zl-sK024?0NBa7}`sF1%sG;_D26w)K`g$3(TTm^LR`Z+-j9X%huc0yrnfDmNFR>%#=gbzYdEy`1_b@@jV)tb z(oVGC3uHgR?a5x!EMrCD;($x6 zg%{C}%Shr1j^hd8-dha1Y zj}OpKS?+zRa1WM>^kC?7FK?x%EhSHB0q-JDx1wbQU8~KPMNMF)#8;JG!8iwX`kL}& zk6P-ZdS_JwPbk*@77`Y-QOvrvPU;pu)L2C k>acuR-PR=*3i^{0_hAH+T7lK=n! literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/Copy$TreeCopier.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/Copy$TreeCopier.class new file mode 100644 index 0000000000000000000000000000000000000000..f51f892fdb239067d4c744fee5b1379f2ec47b15 GIT binary patch literal 4014 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 YEH$c`X(ec_>QINxzs_5NNDcJ=4Rra_`Tzg` literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/EcoreHelper.class b/fr.inria.diverse.cloning.runtime/target/classes/fr/inria/diverse/cloning/runtime/util/EcoreHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3542da41c31b62df7c79d77348962a794fa872e0 GIT binary patch literal 5303 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/fr.inria.diverse.cloning.runtime-0.1.0-SNAPSHOT.jar b/fr.inria.diverse.cloning.runtime/target/fr.inria.diverse.cloning.runtime-0.1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..44eb9b6bd9bc45e8eb6ff6239a3b67ada75b1fc8 GIT binary patch literal 27375 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.runtime/target/local-artifacts.properties b/fr.inria.diverse.cloning.runtime/target/local-artifacts.properties new file mode 100644 index 0000000..d8c957f --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/target/local-artifacts.properties @@ -0,0 +1,4 @@ +#Tue Apr 01 10:52:48 CEST 2014 +artifact.attached.p2metadata=/home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.runtime/target/p2content.xml +artifact.main=/home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.runtime/target/fr.inria.diverse.cloning.runtime-0.1.0-SNAPSHOT.jar +artifact.attached.p2artifacts=/home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.runtime/target/p2artifacts.xml diff --git a/fr.inria.diverse.cloning.runtime/target/maven-archiver/pom.properties b/fr.inria.diverse.cloning.runtime/target/maven-archiver/pom.properties new file mode 100644 index 0000000..7bd392c --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Tue Apr 01 10:52:48 CEST 2014 +version=0.1.0-SNAPSHOT +groupId=fr.inria.diverse.cloning +artifactId=fr.inria.diverse.cloning.runtime diff --git a/fr.inria.diverse.cloning.runtime/target/p2artifacts.xml b/fr.inria.diverse.cloning.runtime/target/p2artifacts.xml new file mode 100644 index 0000000..2392ea4 --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/target/p2artifacts.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/fr.inria.diverse.cloning.runtime/target/p2content.xml b/fr.inria.diverse.cloning.runtime/target/p2content.xml new file mode 100644 index 0000000..9d1a0f7 --- /dev/null +++ b/fr.inria.diverse.cloning.runtime/target/p2content.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bundle-SymbolicName: fr.inria.diverse.cloning.runtime;singleton:=true Bundle-Version: 0.1.0.201404010852 + + + + + diff --git a/plot-all b/plot-all index 1c2809c..4b7a755 100755 --- a/plot-all +++ b/plot-all @@ -1,5 +1,12 @@ #!/bin/bash -R --no-save --args $1 < ~/Dev/modelCloning/emf/process-data.R +RARGS="" + +for i in "$@" +do + RARGS="$RARGS $i" +done + +R --no-save --args $RARGS < ~/Dev/modelCloning/emf/process-data.R ls *.pdf | xargs -I '{}' pdfcrop '{}' '{}' diff --git a/plot-all~ b/plot-all~ index 511273c..2e422e3 100755 --- a/plot-all~ +++ b/plot-all~ @@ -1,5 +1,12 @@ #!/bin/bash -R --no-save --args results.csv < ~/Dev/modelCloning/emf/process-data.R +RARGS="" -ls *.pdf | xargs -I '{}' pdfcrop '{}' '{}' +for i in "$@" +do + RARGS="$RARGS $i" +done + +R --no-save --args $RARGS < ~/Dev/modelCloning/emf/process-data.R + +#ls *.pdf | xargs -I '{}' pdfcrop '{}' '{}' diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5a0c79b --- /dev/null +++ b/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + fr.inria.diverse.cloning + parent + 0.1.0-SNAPSHOT + pom + + + fr.inria.diverse.cloning.runtime + fr.inria.diverse.cloning.materialgenerator + + + + 0.20.0 + + http://download.eclipse.org/releases/kepler + + + + + kepler + ${kepler-repo.url} + p2 + + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho.version} + true + + + + + + + diff --git a/pom.xml~ b/pom.xml~ new file mode 100644 index 0000000..82ad4d4 --- /dev/null +++ b/pom.xml~ @@ -0,0 +1,41 @@ + + + fr.inria.diverse.cloning + parent + 0.1.0-SNAPSHOT + pom + + + fr.inria.diverse.cloning.runtime + fr.inria.diverse.cloning.materialgenerator + + + + 0.20.0 + + http://download.eclipse.org/releases/kepler + + + + + kepler + ${kepler-repo.url} + p2 + + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho.version} + true + + + + + + + diff --git a/process-data.R b/process-data.R index b51596b..1059ee7 100644 --- a/process-data.R +++ b/process-data.R @@ -2,6 +2,10 @@ library(reshape2) library(scales) + +### +# To prepare the ploting with a file of a name and a format (svg of pdf) +### initImage <- function(name, extension) { #par(mar=c(0,0,0,0), mgp=c(0,0,0,0)) @@ -13,24 +17,30 @@ initImage <- function(name, extension) { } -getMemoryUsed <- function(data, mmname, cloningname, nbclones) { - value = data[data$MetamodelName==mmname & data$CloningTechnique==cloningname & data$NumberOfClones==nbclones, c('MemoryUsed')] +### +# Retrieves in a df the memory used in a given run +### +getValue <- function(data, mmname, cloningname, nbclones, column) { + value = data[data$MetamodelName==mmname & data$CloningTechnique==cloningname & data$NumberOfClones==nbclones, c(column)] return(value) } - -computeMemoryGainCreator <- function(rawdata, cloningName) { +### +# Computes and return an operation that, for a given row, +# computes memory gain with regards to another cloning technique +### +computeGainCreator <- function(rawdata, cloningName, column) { numberClonesColumn = which(colnames(rawdata)=="NumberOfClones") - totalMemoryColumn = which(colnames(rawdata)=="MemoryUsed") + totalMemoryColumn = which(colnames(rawdata)==column) nameColumn = which(colnames(rawdata)=="MetamodelName") computeMemoryRatio <- function(row) { totalMemory <- as.integer(row[totalMemoryColumn]) name <- as.character(row[nameColumn]) nbClones <- as.integer(row[numberClonesColumn]) - otherCloningMemory = getMemoryUsed(rawdata, name, cloningName,nbClones) + otherCloningMemory = getValue(rawdata, name, cloningName,nbClones,column) result = ((otherCloningMemory - totalMemory) / otherCloningMemory) return(result) } @@ -41,26 +51,36 @@ computeMemoryGainCreator <- function(rawdata, cloningName) { - +### +# Preprocessing: new columns, enforce order, etc. +### preprocessData <- function (rawdata) { # We merge the columns cloningtechnique and light (to create "LightDeep" for instance) rawdata$CloningTechnique = paste(rawdata$Light, rawdata$CloningTechnique, sep="") - - - #rawdataWithoutLabels <- matrix(as.matrix(rawdata), ncol = ncol(rawdata), dimnames = NULL) - - # For each line, we compute the gain compared to three out of four techniques, and we put it in # Note that the "1" indicates "compute for each row" as opposed to "2" - rawdata$MemoryGainDeep = apply(rawdata,1,computeMemoryGainCreator(rawdata, 'Deep')) - rawdata$MemoryGainLightDeep = apply(rawdata,1,computeMemoryGainCreator(rawdata, 'LightDeep')) - rawdata$MemoryGainMutClassOnly = apply(rawdata,1,computeMemoryGainCreator(rawdata, 'MutClassOnly')) - + rawdata$MemoryGainDeep = apply(rawdata,1,computeGainCreator(rawdata, 'Deep', "MemoryUsed")) + rawdata$MemoryGainLightDeep = apply(rawdata,1,computeGainCreator(rawdata, 'LightDeep',"MemoryUsed")) + rawdata$MemoryGainMutClassOnly = apply(rawdata,1,computeGainCreator(rawdata, 'MutClassOnly',"MemoryUsed")) + rawdata$TimeGainDeep = apply(rawdata,1,computeGainCreator(rawdata, 'Deep', "TimeSpent")) + rawdata$TimeGainLightDeep = apply(rawdata,1,computeGainCreator(rawdata, 'LightDeep',"TimeSpent")) + rawdata$TimeGainMutClassOnly = apply(rawdata,1,computeGainCreator(rawdata, 'MutClassOnly',"TimeSpent")) + # Performance gain as well rawdata$PerfGain = ((rawdata$OriginalModelPerformance - rawdata$CloneModelPerformance)/rawdata$OriginalModelPerformance) + print ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa") + thousand = rawdata[rawdata$NumberOfClones==1000 & rawdata$CloningTechnique=="LightDeep",] + print(median(thousand$PerfGain)) + + print ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa") + + thousand = rawdata[rawdata$NumberOfClones==1000 & rawdata$CloningTechnique=="LightMutClassOnly",] + print(median(thousand$PerfGain)) + print ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa") + # Getting the list of cloning techniques, in the right order techniques = unique(rawdata$CloningTechnique) @@ -74,12 +94,12 @@ preprocessData <- function (rawdata) { -# +### # Creates a barplot that compares a given metamodel on one aspect (memory or time) for numerous "number of clones" values -# +### plotNumberOfClones <- function(rawdata, metamodelname, minvalue, maxvalue, measure, title){ - prefiltered = preprocessData(rawdata) + prefiltered = rawdata filtered = prefiltered[prefiltered$MetamodelName==metamodelname & prefiltered$NumberOfClones<=maxvalue & prefiltered$NumberOfClones>=minvalue & prefiltered$CloningTechnique!="Deep", c(measure,'CloningTechnique', 'NumberOfClones')] @@ -100,12 +120,13 @@ plotNumberOfClones <- function(rawdata, metamodelname, minvalue, maxvalue, measu myylab=measure if (measure == "MemoryGainDeep") { - myylab = "memory gain over NoShare" + myylab = "memory gain over DeepClone" } for (format in formats) { initImage(name,format) - barplot(as.matrix(result), main=title, xlab= "number of clones", ylab=myylab,beside=TRUE, col=colors) + barplot(as.matrix(result), main=title, xlab= "number of clones", ylab=myylab,beside=TRUE, col=colors, yaxt="n") + axis(2, at=pretty(filtered[,c(measure)]), lab=paste0(pretty(filtered[,c(measure)]) * 100,"%"), las=TRUE,pos=0) legend("topleft", as.vector(legendc), cex=1, bty="n", fill=colors); } @@ -115,8 +136,10 @@ plotNumberOfClones <- function(rawdata, metamodelname, minvalue, maxvalue, measu - -plotStuff <- function(rawdata, measure, variable, numberOfClones, cloning, style, maxX, maxY, title) { +### +# Creates a plot... mostly used for memory +### +plotStuff <- function(rawdata, measure, variable, numberOfClones, cloning, style, maxX, maxY, percentX) { myxlim = NULL if (maxX > 0) { myxlim = c(0,maxX) @@ -131,121 +154,176 @@ plotStuff <- function(rawdata, measure, variable, numberOfClones, cloning, style myxlab = "proportion of shareable classes (case ObjShare)" } if (variable == "NoObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case NoObjShare)" + myxlab = "density of shareable properties in part shareable classes\n (ShareFieldsOnly strategy)" } if (variable == "ObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case ObjShare)" + myxlab = "density of shareable properties in part shareable classes\n (ShareBoth strategy)" + } + if (variable == "ObjShareShareableClassesRatio") { + myxlab = "proportion of shareable classes (ShareObjectsOnly strategy)" + } + if (variable == "NoObjShareShareablePropertiesInPartShareableClassesDensity") { + myxlab = "density of shareable properties in part shareable classes\n (ShareFieldsOnly strategy)" + } + if (variable == "ObjShareShareablePropertiesInPartShareableClassesDensity") { + myxlab = "density of shareable properties in part shareable classes\n (ShareBoth strategy)" } myylab=measure if (measure == "MemoryGainDeep") { - myylab = "memory gain over NoShare" + myylab = "memory gain over DeepClone" } if (measure == "MemoryGainLightDeep") { - myylab = "memory gain over ShareFields" + myylab = "memory gain over ShareFieldsOnly" } if (measure == "MemoryGainMutClassOnly") { - myylab = "memory gain over ShareObjects" + myylab = "memory gain over ShareObjectsOnly" + } + if (measure == "PerfGain") { + myylab = "Model manipulation efficiency gain over the original model" } - data = preprocessData(rawdata) + data = rawdata mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones,] - initImage(paste(cloning,measure,sep=""),'pdf') + initImage(paste(cloning,measure,variable,sep=""),'pdf') # Type=h pour mettre des petits batons, lwd pour l'épaisseur des traits - plot(mutclassonly[,c(variable)], mutclassonly[,c(measure)],ylim=myylim, pch=style, xlab=myxlab, xlim=myxlim, ylab=myylab, yaxt="n")#, type="h", lwd="3")#, main=title) - axis(2, at=pretty(mutclassonly[,c(measure)]), lab=paste0(pretty(mutclassonly[,c(measure)]) * 100,"%"), las=TRUE) + plot(mutclassonly[,c(variable)], mutclassonly[,c(measure)], pch=style, xlab=myxlab, ylab=myylab, yaxt="n", xaxt="n",frame=F)#, xlim=myxlim, ylim=myylim)#, type="h", lwd="3")#, main=title) + #text(mutclassonly[,c(variable)], mutclassonly[,c(measure)], mutclassonly[,c("MetamodelName")], cex=0.6, pos=1, col="red") + axis(2, at=pretty(mutclassonly[,c(measure)]), lab=paste0(pretty(mutclassonly[,c(measure)]) * 100,"%"), las=TRUE,pos=0) + + if (percentX) { + axis(1, at=pretty(mutclassonly[,c(measure)]), lab=paste0(pretty(mutclassonly[,c(measure)]) * 100,"%"), las=TRUE,pos=0) + } else { + axis(1, at=pretty(mutclassonly[,c(variable)]), pos=0) + } + } - +### +# Adds points to a plot created with "plotStuff" +### addPointsPlotStuff <- function(rawdata, measure,variable, numberOfClones, cloning, style) { - - data = preprocessData(rawdata) + data = rawdata mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones,] - points(mutclassonly[,c(variable)], mutclassonly[,c(measure)], pch=style) - + points(mutclassonly[,c(variable)], mutclassonly[,c(measure)], pch=style) } - -plotPerf<- function(rawdata, variable, numberOfClones, cloning, style, maxX, maxY, title) { - data = preprocessData(rawdata) +################################################################################################################################### +################################################################################################################################### +################################################################################################################################### - mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones & (data$CloneModelPerformance>-1.0),] - - myxlab=variable - if (variable == "ObjShareShareableClassesRatio") { - myxlab = "proportion of shareable classes (case ObjShare)" - } - if (variable == "NoObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case NoObjShare)" - } - if (variable == "ObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case ObjShare)" - } - initImage(paste(cloning,'PerfGain',sep=""),'pdf') +args = commandArgs(TRUE) - # Type=h pour mettre des petits batons, lwd pour l'épaisseur des traits - plot(mutclassonly[,c(variable)], mutclassonly[,c('PerfGain')], pch=style, xlab=myxlab,ylab="performance gain compared to the original model", yaxt="n", xaxt='n')#, type="h", lwd="3")#, main=title) - axis(1, at=pretty(mutclassonly[,c(variable)]), pos=0) - axis(2, at=pretty(mutclassonly[,c('PerfGain')]), lab=paste0(pretty(mutclassonly[,c('PerfGain')]) * 100,"%"), las=TRUE) -} +myrawdata = c() -addPointsPlotPerf<- function(rawdata, variable, numberOfClones, cloning, style) { +if (length(args)==1) { + myrawdata = read.csv(args) +} else { - data = preprocessData(rawdata) - mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones & (data$CloneModelPerformance>-1.0),] - points(mutclassonly[,c(variable)], mutclassonly[,c('PerfGain')], pch=style) + for (arg in args) { + + # Parsing CSV file + newdata = read.csv(arg) + + if (length(myrawdata) == 0) { + myrawdata = newdata + } else { + myrawdata = rbind(myrawdata,newdata) + } + } } - - +data = preprocessData(myrawdata) -arg = commandArgs(TRUE) -# Parsing CSV file -myrawdata = read.csv(arg) -# Plotting performance +# 1:ShareObjects, 2:ShareFields, 3:ShareAll, 4:NoShare pointsStyles=c(15,4,2,1) -plotPerf (myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightDeep', pointsStyles[2], -1, -1, "") -addPointsPlotPerf(myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'MutClassOnly',pointsStyles[1]) -addPointsPlotPerf(myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightMutClassOnly',pointsStyles[3]) -addPointsPlotPerf(myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'Deep',pointsStyles[4]) -legend("topright", c("ShareObjectsOnly","ShareFieldsOnly","ShareAll", "NoShare"), cex=1, bty="n", pch=pointsStyles); -# Plotting the memory gain graph (all metamodels) -plotStuff (myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightMutClassOnly', pointsStyles[3], 1, 1, "Memory gain of ShareObjects compared to NoShare") -addPointsPlotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightDeep', pointsStyles[2]) -addPointsPlotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'MutClassOnly', pointsStyles[1]) -legend("topleft", c("ShareObjectsOnly","ShareFieldsOnly","ShareAll"), cex=1, bty="n", pch=c(15,4,2)); +# +# Plotting performance /!\ FILTERING + ONLY PROXY TECHNIQUES +# +perfdata=data[(data$CloneModelPerformance>-1.0) & data$NoObjShareShareablePropertiesInPartShareableClassesDensity<30,] +plotStuff (perfdata,'PerfGain','NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightDeep', pointsStyles[2], -1, -1,FALSE) +addPointsPlotStuff(perfdata,'PerfGain','NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightMutClassOnly',pointsStyles[3]) +legend("topright", c("ShareFieldsOnly","ShareAll"), cex=1, bty="n", pch=pointsStyles[2:3]) + +# +# Plotting the memory gain graph (all metamodels) for shareobjects +# +plotStuff (data, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightMutClassOnly', pointsStyles[3], 1, 1, TRUE) +#addPointsPlotStuff(data, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightDeep', pointsStyles[2]) +addPointsPlotStuff(data, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'MutClassOnly', pointsStyles[1]) +legend("right", c("ShareObjectsOnly","ShareAll"), cex=1, bty="n", pch=c(pointsStyles[1],pointsStyles[3])) + +# +# Plotting the memory gain (sharefields) +# +sharefieldsdata=data[data$NoObjShareShareablePropertiesInPartShareableClassesDensity<30,] +plotStuff(sharefieldsdata, 'MemoryGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1000, 'LightDeep', pointsStyles[2], -1, 1, FALSE) +legend("topleft", c("ShareFieldsOnly"), cex=1, bty="n", pch=c(pointsStyles[2])) +# +# Plotting the Time gain graph (all metamodels) for shareobjects +# +#plotStuff (data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightMutClassOnly', pointsStyles[3], 1, 1, "") +#addPointsPlotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightDeep', pointsStyles[2]) +#addPointsPlotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 100, 'MutClassOnly', pointsStyles[1]) +#legend("topleft", c("ShareObjectsOnly","ShareAll"), cex=1, bty="n", pch=c(pointsStyles[1],pointsStyles[3])) + + +# +# Plotting the time gain (sharefields) +# +#plotStuff(sharefieldsdata, 'TimeGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 100, 'LightDeep', pointsStyles[2], -1, 1, "") + + +# # Plotting the nbclones-not-relevant graph (note : RANDOMLY CHOSEN METAMODEL) -plotNumberOfClones(myrawdata, "mm6", 0, 100, 'MemoryGainDeep', "") +# +plotNumberOfClones(data, "bundle1-mm9", 0, 10000, 'MemoryGainDeep', "") + +############################################################ tests + + + + + + + + + + + +#plotStuff(data, 'MemoryGainLightDeep', 'ObjShareShareableClassesRatio', 1000, 'LightMutClassOnly', 15, 1, 1, "Memory gain of ShareBoth compared to ShareFields") +#plotStuff(data, 'MemoryGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1000, 'LightDeep', 15, -1, 1, "Memory gain of ShareFields compared to NoShare") -##plotStuff(myrawdata, 'MemoryGainLightDeep', 'ObjShareShareableClassesRatio', '10', 'LightMutClassOnly', 1, 1, "Memory gain of ShareBoth compared to ShareFields") +#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightDeep', 15, -1, -1, "Memory gain of ShareFields compared to NoShare") -##plotStuff(myrawdata, 'MemoryGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', '10', 'LightDeep', -1, 1, "Memory gain of ShareFields compared to NoShare") +#plotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 10000, 'MutClassOnly', 15, -1, -1, "Time gain of ShareFields compared to NoShare") +#plotStuff(data[data$NoObjShareShareablePropertiesInPartShareableClassesDensity<100,], 'TimeGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 100, 'LightDeep', 15, -1, -1, "Time gain of ShareFields compared to NoShare") +#plotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 10000, 'LightMutClassOnly', 15, -1, -1, "Time gain of ShareFields compared to NoShare") -#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightDeep', -1, 1, "Memory gain of ShareFields compared to NoShare") +#plotStuff(data, 'MemoryGainMutClassOnly', 'ObjShareShareablePropertiesInPartShareableClassesDensity', 1000, 'LightMutClassOnly', 15, -1, 1, "Memory gain of ShareBoth compared to ShareObjects") -##plotStuff(myrawdata, 'MemoryGainMutClassOnly', 'ObjShareShareablePropertiesInPartShareableClassesDensity', '10', 'LightMutClassOnly', -1, 1, "Memory gain of ShareBoth compared to ShareObjects") -#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightMutClassOnly', 1, 1, "Memory gain of ShareBoth compared to NoShare") +#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightMutClassOnly',15, -1, -1, "Memory gain of ShareBoth compared to NoShare") diff --git a/process-data.R~ b/process-data.R~ index db45c01..799710e 100644 --- a/process-data.R~ +++ b/process-data.R~ @@ -2,6 +2,10 @@ library(reshape2) library(scales) + +### +# To prepare the ploting with a file of a name and a format (svg of pdf) +### initImage <- function(name, extension) { #par(mar=c(0,0,0,0), mgp=c(0,0,0,0)) @@ -13,24 +17,30 @@ initImage <- function(name, extension) { } -getMemoryUsed <- function(data, mmname, cloningname, nbclones) { - value = data[data$MetamodelName==mmname & data$CloningTechnique==cloningname & data$NumberOfClones==nbclones, c('MemoryUsed')] +### +# Retrieves in a df the memory used in a given run +### +getValue <- function(data, mmname, cloningname, nbclones, column) { + value = data[data$MetamodelName==mmname & data$CloningTechnique==cloningname & data$NumberOfClones==nbclones, c(column)] return(value) } - -computeMemoryGainCreator <- function(rawdata, cloningName) { +### +# Computes and return an operation that, for a given row, +# computes memory gain with regards to another cloning technique +### +computeGainCreator <- function(rawdata, cloningName, column) { numberClonesColumn = which(colnames(rawdata)=="NumberOfClones") - totalMemoryColumn = which(colnames(rawdata)=="MemoryUsed") + totalMemoryColumn = which(colnames(rawdata)==column) nameColumn = which(colnames(rawdata)=="MetamodelName") computeMemoryRatio <- function(row) { totalMemory <- as.integer(row[totalMemoryColumn]) name <- as.character(row[nameColumn]) nbClones <- as.integer(row[numberClonesColumn]) - otherCloningMemory = getMemoryUsed(rawdata, name, cloningName,nbClones) + otherCloningMemory = getValue(rawdata, name, cloningName,nbClones,column) result = ((otherCloningMemory - totalMemory) / otherCloningMemory) return(result) } @@ -41,26 +51,36 @@ computeMemoryGainCreator <- function(rawdata, cloningName) { - +### +# Preprocessing: new columns, enforce order, etc. +### preprocessData <- function (rawdata) { # We merge the columns cloningtechnique and light (to create "LightDeep" for instance) rawdata$CloningTechnique = paste(rawdata$Light, rawdata$CloningTechnique, sep="") - - - #rawdataWithoutLabels <- matrix(as.matrix(rawdata), ncol = ncol(rawdata), dimnames = NULL) - - # For each line, we compute the gain compared to three out of four techniques, and we put it in # Note that the "1" indicates "compute for each row" as opposed to "2" - rawdata$MemoryGainDeep = apply(rawdata,1,computeMemoryGainCreator(rawdata, 'Deep')) - rawdata$MemoryGainLightDeep = apply(rawdata,1,computeMemoryGainCreator(rawdata, 'LightDeep')) - rawdata$MemoryGainMutClassOnly = apply(rawdata,1,computeMemoryGainCreator(rawdata, 'MutClassOnly')) - + rawdata$MemoryGainDeep = apply(rawdata,1,computeGainCreator(rawdata, 'Deep', "MemoryUsed")) + rawdata$MemoryGainLightDeep = apply(rawdata,1,computeGainCreator(rawdata, 'LightDeep',"MemoryUsed")) + rawdata$MemoryGainMutClassOnly = apply(rawdata,1,computeGainCreator(rawdata, 'MutClassOnly',"MemoryUsed")) + rawdata$TimeGainDeep = apply(rawdata,1,computeGainCreator(rawdata, 'Deep', "TimeSpent")) + rawdata$TimeGainLightDeep = apply(rawdata,1,computeGainCreator(rawdata, 'LightDeep',"TimeSpent")) + rawdata$TimeGainMutClassOnly = apply(rawdata,1,computeGainCreator(rawdata, 'MutClassOnly',"TimeSpent")) + # Performance gain as well rawdata$PerfGain = ((rawdata$OriginalModelPerformance - rawdata$CloneModelPerformance)/rawdata$OriginalModelPerformance) + print ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa") + thousand = rawdata[rawdata$NumberOfClones==1000 & rawdata$CloningTechnique=="LightDeep",] + print(median(thousand$PerfGain)) + + print ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa") + + thousand = rawdata[rawdata$NumberOfClones==1000 & rawdata$CloningTechnique=="LightMutClassOnly",] + print(median(thousand$PerfGain)) + print ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa") + # Getting the list of cloning techniques, in the right order techniques = unique(rawdata$CloningTechnique) @@ -74,12 +94,12 @@ preprocessData <- function (rawdata) { -# +### # Creates a barplot that compares a given metamodel on one aspect (memory or time) for numerous "number of clones" values -# +### plotNumberOfClones <- function(rawdata, metamodelname, minvalue, maxvalue, measure, title){ - prefiltered = preprocessData(rawdata) + prefiltered = rawdata filtered = prefiltered[prefiltered$MetamodelName==metamodelname & prefiltered$NumberOfClones<=maxvalue & prefiltered$NumberOfClones>=minvalue & prefiltered$CloningTechnique!="Deep", c(measure,'CloningTechnique', 'NumberOfClones')] @@ -100,12 +120,13 @@ plotNumberOfClones <- function(rawdata, metamodelname, minvalue, maxvalue, measu myylab=measure if (measure == "MemoryGainDeep") { - myylab = "memory gain over NoShare" + myylab = "memory gain over DeepClone" } for (format in formats) { initImage(name,format) - barplot(as.matrix(result), main=title, xlab= "number of clones", ylab=myylab,beside=TRUE, col=colors) + barplot(as.matrix(result), main=title, xlab= "number of clones", ylab=myylab,beside=TRUE, col=colors, yaxt="n") + axis(2, at=pretty(filtered[,c(measure)]), lab=paste0(pretty(filtered[,c(measure)]) * 100,"%"), las=TRUE,pos=0) legend("topleft", as.vector(legendc), cex=1, bty="n", fill=colors); } @@ -115,8 +136,10 @@ plotNumberOfClones <- function(rawdata, metamodelname, minvalue, maxvalue, measu - -plotStuff <- function(rawdata, measure, variable, numberOfClones, cloning, style, maxX, maxY, title) { +### +# Creates a plot... mostly used for memory +### +plotStuff <- function(rawdata, measure, variable, numberOfClones, cloning, style, maxX, maxY, percentX) { myxlim = NULL if (maxX > 0) { myxlim = c(0,maxX) @@ -131,121 +154,176 @@ plotStuff <- function(rawdata, measure, variable, numberOfClones, cloning, style myxlab = "proportion of shareable classes (case ObjShare)" } if (variable == "NoObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case NoObjShare)" + myxlab = "density of shareable properties in part shareable classes\n (ShareFieldsOnly strategy)" } if (variable == "ObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case ObjShare)" + myxlab = "density of shareable properties in part shareable classes\n (ShareBoth strategy)" + } + if (variable == "ObjShareShareableClassesRatio") { + myxlab = "proportion of shareable classes (ShareObjectsOnly strategy)" + } + if (variable == "NoObjShareShareablePropertiesInPartShareableClassesDensity") { + myxlab = "density of shareable properties in part shareable classes\n (ShareFieldsOnly strategy)" + } + if (variable == "ObjShareShareablePropertiesInPartShareableClassesDensity") { + myxlab = "density of shareable properties in part shareable classes\n (ShareBoth strategy)" } myylab=measure if (measure == "MemoryGainDeep") { - myylab = "memory gain over NoShare" + myylab = "memory gain over DeepClone" } if (measure == "MemoryGainLightDeep") { - myylab = "memory gain over ShareFields" + myylab = "memory gain over ShareFieldsOnly" } if (measure == "MemoryGainMutClassOnly") { - myylab = "memory gain over ShareObjects" + myylab = "memory gain over ShareObjectsOnly" + } + if (measure == "PerfGain") { + myylab = "Model manipulation efficiency gain over the original model" } - data = preprocessData(rawdata) + data = rawdata mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones,] - initImage(paste(cloning,measure,sep=""),'pdf') + initImage(paste(cloning,measure,variable,sep=""),'pdf') # Type=h pour mettre des petits batons, lwd pour l'épaisseur des traits - plot(mutclassonly[,c(variable)], mutclassonly[,c(measure)],ylim=myylim, pch=style, xlab=myxlab, xlim=myxlim, ylab=myylab, yaxt="n")#, type="h", lwd="3")#, main=title) - axis(2, at=pretty(mutclassonly[,c(measure)]), lab=paste0(pretty(mutclassonly[,c(measure)]) * 100,"%"), las=TRUE) + plot(mutclassonly[,c(variable)], mutclassonly[,c(measure)], pch=style, xlab=myxlab, ylab=myylab, yaxt="n", xaxt="n",frame=F)#, xlim=myxlim, ylim=myylim)#, type="h", lwd="3")#, main=title) + #text(mutclassonly[,c(variable)], mutclassonly[,c(measure)], mutclassonly[,c("MetamodelName")], cex=0.6, pos=1, col="red") + axis(2, at=pretty(mutclassonly[,c(measure)]), lab=paste0(pretty(mutclassonly[,c(measure)]) * 100,"%"), las=TRUE,pos=0) + + if (percentX) { + axis(1, at=pretty(mutclassonly[,c(measure)]), lab=paste0(pretty(mutclassonly[,c(measure)]) * 100,"%"), las=TRUE,pos=0) + } else { + axis(1, at=pretty(mutclassonly[,c(variable)]), pos=0) + } + } - +### +# Adds points to a plot created with "plotStuff" +### addPointsPlotStuff <- function(rawdata, measure,variable, numberOfClones, cloning, style) { - - data = preprocessData(rawdata) + data = rawdata mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones,] - points(mutclassonly[,c(variable)], mutclassonly[,c(measure)], pch=style) - + points(mutclassonly[,c(variable)], mutclassonly[,c(measure)], pch=style) } - -plotPerf<- function(rawdata, variable, numberOfClones, cloning, style, maxX, maxY, title) { - data = preprocessData(rawdata) +################################################################################################################################### +################################################################################################################################### +################################################################################################################################### - mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones & (data$CloneModelPerformance>-1.0),] - myxlab=variable - if (variable == "ObjShareShareableClassesRatio") { - myxlab = "proportion of shareable classes (case ObjShare)" - } - if (variable == "NoObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case NoObjShare)" - } - if (variable == "ObjShareShareablePropertiesInPartShareableClassesDensity") { - myxlab = "density of shareable properties in part shareable classes (case ObjShare)" - } +args = commandArgs(TRUE) - initImage(paste(cloning,'PerfGain',sep=""),'pdf') +myrawdata = c() - # Type=h pour mettre des petits batons, lwd pour l'épaisseur des traits - plot(mutclassonly[,c(variable)], mutclassonly[,c('PerfGain')], pch=style, xlab=myxlab,ylab="performance gain compared to the original model", yaxt="n", xaxt='n')#, type="h", lwd="3")#, main=title) - axis(1, at=pretty(mutclassonly[,c(variable)]), pos=0) - axis(2, at=pretty(mutclassonly[,c('PerfGain')]), lab=paste0(pretty(mutclassonly[,c('PerfGain')]) * 100,"%"), las=TRUE) +if (length(args)==1) { + myrawdata = read.csv(args) +} else { + + for (arg in args) { + + # Parsing CSV file + newdata = read.csv(arg) + + if (length(myrawdata) == 0) { + myrawdata = newdata + } else { + myrawdata = rbind(myrawdata,newdata) + } + + } } +fig +data = preprocessData(myrawdata) -addPointsPlotPerf<- function(rawdata, variable, numberOfClones, cloning, style) { - data = preprocessData(rawdata) - mutclassonly = data[data$CloningTechnique==cloning & data$NumberOfClones==numberOfClones & (data$CloneModelPerformance>-1.0),] - points(mutclassonly[,c(variable)], mutclassonly[,c('PerfGain')], pch=style) -} - - +# 1:ShareObjects, 2:ShareFields, 3:ShareAll, 4:NoShare +pointsStyles=c(15,4,2,1) +# +# Plotting performance /!\ FILTERING + ONLY PROXY TECHNIQUES +# +perfdata=data[(data$CloneModelPerformance>-1.0) & data$NoObjShareShareablePropertiesInPartShareableClassesDensity<30,] +plotStuff (perfdata,'PerfGain','NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightDeep', pointsStyles[2], -1, -1,FALSE) +addPointsPlotStuff(perfdata,'PerfGain','NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightMutClassOnly',pointsStyles[3]) +legend("topright", c("ShareFieldsOnly","ShareAll"), cex=1, bty="n", pch=pointsStyles[2:3]) -arg = commandArgs(TRUE) -# Parsing CSV file -myrawdata = read.csv(arg) +# +# Plotting the memory gain graph (all metamodels) for shareobjects +# +plotStuff (data, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightMutClassOnly', pointsStyles[3], 1, 1, TRUE) +#addPointsPlotStuff(data, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightDeep', pointsStyles[2]) +addPointsPlotStuff(data, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'MutClassOnly', pointsStyles[1]) +legend("right", c("ShareObjectsOnly","ShareAll"), cex=1, bty="n", pch=c(pointsStyles[1],pointsStyles[3])) + +# +# Plotting the memory gain (sharefields) +# +sharefieldsdata=data[data$NoObjShareShareablePropertiesInPartShareableClassesDensity<30,] +plotStuff(sharefieldsdata, 'MemoryGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1000, 'LightDeep', pointsStyles[2], -1, 1, FALSE) +legend("topleft", c("ShareFieldsOnly"), cex=1, bty="n", pch=c(pointsStyles[2])) -# Plotting performance -pointsStyles=c(15,4,2,1) -plotPerf (myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightDeep', pointsStyles[2], -1, -1, "") -addPointsPlotPerf(myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'MutClassOnly',pointsStyles[1]) -addPointsPlotPerf(myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'LightMutClassOnly',pointsStyles[3]) -addPointsPlotPerf(myrawdata,'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1, 'Deep',pointsStyles[4]) -legend("topright", c("ShareObjectsOnly","ShareFieldsOnly","ShareAll", "NoShare"), cex=1, bty="n", pch=pointsStyles); +# +# Plotting the Time gain graph (all metamodels) for shareobjects +# +#plotStuff (data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightMutClassOnly', pointsStyles[3], 1, 1, "") +#addPointsPlotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightDeep', pointsStyles[2]) +#addPointsPlotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 100, 'MutClassOnly', pointsStyles[1]) +#legend("topleft", c("ShareObjectsOnly","ShareAll"), cex=1, bty="n", pch=c(pointsStyles[1],pointsStyles[3])) -# Plotting the memory gain graph (all metamodels) -plotStuff (myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightMutClassOnly', pointsStyles[3], 1, 1, "Memory gain of ShareObjects compared to NoShare") -addPointsPlotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightDeep', pointsStyles[2]) -addPointsPlotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'MutClassOnly', pointsStyles[1]) -legend("topleft", c("ShareObjectsOnly","ShareFieldsOnly","ShareAll"), cex=1, bty="n", pch=c(15,4,2)); + +# +# Plotting the time gain (sharefields) +# +#plotStuff(sharefieldsdata, 'TimeGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 100, 'LightDeep', pointsStyles[2], -1, 1, "") +# # Plotting the nbclones-not-relevant graph (note : RANDOMLY CHOSEN METAMODEL) -plotNumberOfClones(myrawdata, "mm5", 0, 100, 'MemoryGainDeep', "") +# +plotNumberOfClones(data, "bundle1-mm9", 0, 10000, 'MemoryGainDeep', "") + +############################################################ tests + + + + + + + + + + + +#plotStuff(data, 'MemoryGainLightDeep', 'ObjShareShareableClassesRatio', 1000, 'LightMutClassOnly', 15, 1, 1, "Memory gain of ShareBoth compared to ShareFields") +#plotStuff(data, 'MemoryGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 1000, 'LightDeep', 15, -1, 1, "Memory gain of ShareFields compared to NoShare") -##plotStuff(myrawdata, 'MemoryGainLightDeep', 'ObjShareShareableClassesRatio', '10', 'LightMutClassOnly', 1, 1, "Memory gain of ShareBoth compared to ShareFields") +#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightDeep', 15, -1, -1, "Memory gain of ShareFields compared to NoShare") -##plotStuff(myrawdata, 'MemoryGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', '10', 'LightDeep', -1, 1, "Memory gain of ShareFields compared to NoShare") +#plotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 10000, 'MutClassOnly', 15, -1, -1, "Time gain of ShareFields compared to NoShare") +#plotStuff(data[data$NoObjShareShareablePropertiesInPartShareableClassesDensity<100,], 'TimeGainDeep', 'NoObjShareShareablePropertiesInPartShareableClassesDensity', 100, 'LightDeep', 15, -1, -1, "Time gain of ShareFields compared to NoShare") +#plotStuff(data, 'TimeGainDeep', 'ObjShareShareableClassesRatio', 10000, 'LightMutClassOnly', 15, -1, -1, "Time gain of ShareFields compared to NoShare") -#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightDeep', -1, 1, "Memory gain of ShareFields compared to NoShare") +#plotStuff(data, 'MemoryGainMutClassOnly', 'ObjShareShareablePropertiesInPartShareableClassesDensity', 1000, 'LightMutClassOnly', 15, -1, 1, "Memory gain of ShareBoth compared to ShareObjects") -##plotStuff(myrawdata, 'MemoryGainMutClassOnly', 'ObjShareShareablePropertiesInPartShareableClassesDensity', '10', 'LightMutClassOnly', -1, 1, "Memory gain of ShareBoth compared to ShareObjects") -#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 1000, 'LightMutClassOnly', 1, 1, "Memory gain of ShareBoth compared to NoShare") +#plotStuff(myrawdata, 'MemoryGainDeep', 'ObjShareShareableClassesRatio', 100, 'LightMutClassOnly',15, -1, -1, "Memory gain of ShareBoth compared to NoShare") -- GitLab