TCI - Handle Exceptions in EMF Classes when retrieving templates
Add helper function to catch all exceptions that occur while retrieving
possible template EClasses and ignore them.
Change-Id: I7b11b7fb0ae1d31c0490e240ee3be2c8ea9b35e3
Signed-off-by: Eugen Neufeld <eneufeld@eclipsesource.com>
diff --git a/bundles/org.eclipse.emfforms.core.services.datatemplate/src/org/eclipse/emfforms/internal/core/services/datatemplate/TemplateCreateNewModelElementStrategyProvider.java b/bundles/org.eclipse.emfforms.core.services.datatemplate/src/org/eclipse/emfforms/internal/core/services/datatemplate/TemplateCreateNewModelElementStrategyProvider.java
index 8ce1971..e536725 100644
--- a/bundles/org.eclipse.emfforms.core.services.datatemplate/src/org/eclipse/emfforms/internal/core/services/datatemplate/TemplateCreateNewModelElementStrategyProvider.java
+++ b/bundles/org.eclipse.emfforms.core.services.datatemplate/src/org/eclipse/emfforms/internal/core/services/datatemplate/TemplateCreateNewModelElementStrategyProvider.java
@@ -20,6 +20,7 @@
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -280,7 +281,8 @@
if (availableTemplates.size() > 1) {
// Don't show classes for which we don't have templates (bug 543461)
final Set<EClass> templateClasses = availableTemplates.stream()
- .map(Template::getInstance).filter(Objects::nonNull).map(EObject::eClass)
+ .map(Template::getInstance).filter(Objects::nonNull).map(ignoreException(EObject::eClass))
+ .filter(Objects::nonNull)
.collect(Collectors.toSet());
subClasses.retainAll(templateClasses);
@@ -317,4 +319,17 @@
return wizard.getSelectedTemplate();
}
}
+
+ // CHECKSTYLE.OFF: IllegalCatch
+ private static <T, R> Function<T, R> ignoreException(Function<T, R> function) {
+ return t -> {
+ try {
+ return function.apply(t);
+ } catch (final Exception e) {
+ // ignore
+ return null;
+ }
+ };
+ }
+ // CHECKSTYLE.ON: IllegalCatch
}