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
 }