[573449] Ensure class load failure in nested function
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/Java2QVTTypeResolver.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/Java2QVTTypeResolver.java
index de61556..2b73161 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/Java2QVTTypeResolver.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/Java2QVTTypeResolver.java
@@ -423,28 +423,12 @@
ModelContent genModelContent = EmfUtil.safeLoadModel(genModelUri, resourceSet);
if (genModelContent != null) {
- Iterator<EObject> iterator = EcoreUtil.getAllContents(genModelContent.getContent());
-
- while (iterator.hasNext()) {
- EObject eObject = iterator.next();
-
- try {
- if (eObject instanceof GenClassifier) {
- GenClassifier genClassifier = (GenClassifier) eObject;
-
- EClassifier ecoreClassifier = genClassifier.getEcoreClassifier();
-
- if (ecoreClassifier == eClassifier) {
- String classifierInstanceName = genClassifier.getRawInstanceClassName();
-
- if (type.getName().equals(classifierInstanceName)) {
- return true;
- }
- }
- }
- } catch(NoClassDefFoundError e) {
- break;
+ try {
+ if (isMatchingInstanceGenClassifier(eClassifier, type, genModelContent)) {
+ return true;
}
+ } catch(NoClassDefFoundError e) {
+ // Ignore failure due to missing org.eclipse.emf.ecore.codegen support
}
}
}
@@ -453,4 +437,21 @@
return false;
}
+ private static boolean isMatchingInstanceGenClassifier(EClassifier eClassifier, Class<?> type, ModelContent genModelContent) {
+ Iterator<EObject> iterator = EcoreUtil.getAllContents(genModelContent.getContent());
+ while (iterator.hasNext()) {
+ EObject eObject = iterator.next();
+ if (eObject instanceof GenClassifier) {
+ GenClassifier genClassifier = (GenClassifier) eObject;
+ EClassifier ecoreClassifier = genClassifier.getEcoreClassifier();
+ if (ecoreClassifier == eClassifier) {
+ String classifierInstanceName = genClassifier.getRawInstanceClassName();
+ if (type.getName().equals(classifierInstanceName)) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
}