Skip to content
Snippets Groups Projects
Commit ae1c6476 authored by Johannes Eder's avatar Johannes Eder
Browse files

remove unknown features after migrations

* if there are unknown features after migration, those ecore elements
will be removed

Issue-Ref: 3865
Issue-Url: https://af3-developer.fortiss.org/issues/3865



Signed-off-by: default avatarJohannes Eder <eder@fortiss.org>
parent ab61395c
No related branches found
No related tags found
1 merge request!843865: tolerant model loader
......@@ -49,8 +49,8 @@ public interface IMigrationProvider extends IObjectAware<ITopLevelElement> {
* in the model. This can be useful to detect features coming from old models and can be then
* translated to the new model by a migrator.
*
* The migrator should remove from unknownFeatures the features that it dealt with.
* If one forgets to do so, the migrator will run into an infinite loop!
* @return all features which could not be migrated.
*/
void migrate(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures);
Map<EObject, AnyType> migrate(ITopLevelElement modelElement,
Map<EObject, AnyType> unknownFeatures);
}
......@@ -7,7 +7,7 @@ ElementCompositorService.java 98c5d27e09881e60aa4f87c1ac0c7787cdec9f7c GREEN
LibraryPrototypeProvider.java b77eddbdca78f561ffb1233e98817be361c690ae GREEN
LibraryService.java d22671ba820466062852c15873698adf28960d94 GREEN
LoggingService.java da784259f7b456b54bf75c41ec268f64919ce78d GREEN
MigrationService.java 632c13563a3d69681e2a608023fcdadbe5340c4b GREEN
MigrationService.java f968fcb7de02f78e7d43c0654e958611296539d0 YELLOW
PersistencyService.java 103eef642c038ef63fa49b743d803aaa3fea2724 GREEN
PrototypeService.java 18c3db05ab11f189a9711bf241c3c7f35c954a9e GREEN
ToolingKernelInternal.java d624a5f6b237ce993e150e2b8d1b4390e3fc8f7a GREEN
......
......@@ -20,6 +20,7 @@ import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstChildWithType;
import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
......@@ -27,6 +28,7 @@ import java.util.Map.Entry;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.FeatureMap;
import org.eclipse.emf.ecore.xml.type.AnyType;
import org.fortiss.tooling.kernel.ToolingKernelActivator;
......@@ -117,25 +119,29 @@ public class MigrationService extends ObjectAwareServiceBase<IMigrationProvider>
@Override
public void run() {
Map<EObject, AnyType> featuresNotMigrated = new HashMap<EObject, AnyType>();
for(IMigrationProvider provider : getProviders(input)) {
if(provider.needMigration(input, unknownFeatures)) {
provider.migrate(input, unknownFeatures);
featuresNotMigrated.putAll(provider.migrate(input, unknownFeatures));
}
}
if(!unknownFeatures.isEmpty()) {
error(ToolingKernelActivator.getDefault(),
input.getSaveableName() + " contains one or more unknown feature(s): " +
featuresToStrings(unknownFeatures));
}
for(IMigrationProvider provider : getProviders(input)) {
if(provider.needMigration(input, unknownFeatures)) {
if(provider.needMigration(input, featuresNotMigrated)) {
error(ToolingKernelActivator.getDefault(),
"Migrating " + input.getSaveableName() + " failed: A need for " +
"migration is indicated although the migration was " +
"already performed. Please fix the migrator (or model).");
}
}
if(!featuresNotMigrated.isEmpty()) {
error(ToolingKernelActivator.getDefault(), input.getSaveableName() +
" contains one or more unknown feature(s) which will be deleted: " +
featuresToStrings(unknownFeatures));
for(Entry<EObject, AnyType> e : featuresNotMigrated.entrySet()) {
EcoreUtil.delete(e.getKey(), true);
}
}
}
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment