From 754fe33f129e83dc23347ce454b024a9307cc7cc Mon Sep 17 00:00:00 2001
From: Simon Barner <barner@fortiss.org>
Date: Thu, 19 Dec 2019 17:11:40 +0100
Subject: [PATCH] Improve error message: Print types of elements to be removed

* Not: names of features that contained the unknown types

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

Signed-off-by: Simon Barner <barner@fortiss.org>
---
 .../fortiss/tooling/kernel/internal/.ratings  |  2 +-
 .../kernel/internal/MigrationService.java     | 31 ++++++++-----------
 2 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings
index cc7456cfe..1198c9379 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/.ratings
@@ -7,7 +7,7 @@ ElementCompositorService.java 98c5d27e09881e60aa4f87c1ac0c7787cdec9f7c GREEN
 LibraryPrototypeProvider.java b77eddbdca78f561ffb1233e98817be361c690ae GREEN
 LibraryService.java d22671ba820466062852c15873698adf28960d94 GREEN
 LoggingService.java da784259f7b456b54bf75c41ec268f64919ce78d GREEN
-MigrationService.java b0f05859e33a85bc285a05056d5c16448a4cb4f0 YELLOW
+MigrationService.java 22713e178a9648e858d6cd77f73fe77918ce5d4f YELLOW
 PersistencyService.java 103eef642c038ef63fa49b743d803aaa3fea2724 GREEN
 PrototypeService.java 18c3db05ab11f189a9711bf241c3c7f35c954a9e GREEN
 ToolingKernelInternal.java d624a5f6b237ce993e150e2b8d1b4390e3fc8f7a GREEN
diff --git a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/MigrationService.java b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/MigrationService.java
index 9786e3974..22713e178 100644
--- a/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/MigrationService.java
+++ b/org.fortiss.tooling.kernel/src/org/fortiss/tooling/kernel/internal/MigrationService.java
@@ -16,19 +16,21 @@
 package org.fortiss.tooling.kernel.internal;
 
 import static java.util.Collections.emptyList;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toSet;
 import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstChildWithType;
 import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
+import static org.fortiss.tooling.kernel.utils.LoggingUtils.warning;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.stream.Stream;
 
 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.FeatureMap;
 import org.eclipse.emf.ecore.xml.type.AnyType;
 import org.fortiss.tooling.kernel.ToolingKernelActivator;
 import org.fortiss.tooling.kernel.extension.IMigrationProvider;
@@ -98,19 +100,6 @@ public class MigrationService extends ObjectAwareServiceBase<IMigrationProvider>
 		return false;
 	}
 
-	/** Extracts the list of feature names from a map of features. */
-	private List<String> featuresToStrings(Map<EObject, AnyType> features) {
-		List<String> res = new BasicEList<String>();
-		for(AnyType featuresPerKey : features.values()) {
-			FeatureMap actualFeatures = featuresPerKey.getMixed();
-			actualFeatures.addAll(featuresPerKey.getAnyAttribute());
-			for(FeatureMap.Entry feature : actualFeatures) {
-				res.add(feature.getEStructuralFeature().getName());
-			}
-		}
-		return res;
-	}
-
 	/** {@inheritDoc} */
 	@Override
 	public void migrate(final ITopLevelElement input, final Map<EObject, AnyType> unknownFeatures) {
@@ -134,9 +123,15 @@ public class MigrationService extends ObjectAwareServiceBase<IMigrationProvider>
 				}
 				unknownFeatures.entrySet().removeAll(migratedFeatures.entrySet());
 				if(!unknownFeatures.isEmpty()) {
-					error(ToolingKernelActivator.getDefault(), input.getSaveableName() +
-							" contains one or more unknown feature(s) which will be deleted: " +
-							featuresToStrings(unknownFeatures));
+					Stream<AnyType> anyTypes = unknownFeatures.values().stream()
+							.map(v -> v.getMixed()).flatMap(f -> f.stream()).map(e -> e.getValue())
+							.filter(AnyType.class::isInstance).map(AnyType.class::cast);
+					String removedTypes = anyTypes.map(a -> a.eClass().getName()).collect(toSet())
+							.stream().collect(joining(", "));
+					warning(ToolingKernelActivator.getDefault(), input.getSaveableName() +
+							" contains one or more feature(s) of the following unkown types that will be deleted: " +
+							removedTypes + ".");
+
 					unknownFeatures.clear();
 				}
 			}
-- 
GitLab