diff options
2 files changed, 54 insertions, 4 deletions
diff --git a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenClassifierImpl.java b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenClassifierImpl.java index 8a7fcde66..0cc8790f3 100644 --- a/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenClassifierImpl.java +++ b/plugins/org.eclipse.emf.codegen.ecore/src/org/eclipse/emf/codegen/ecore/genmodel/impl/GenClassifierImpl.java @@ -412,10 +412,58 @@ public abstract class GenClassifierImpl extends GenBaseImpl implements GenClassi public boolean isUncheckedCast() { - return - getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50 && - getEcoreClassifier().getInstanceTypeName() != null && - getEcoreClassifier().getInstanceTypeName().indexOf('<') != -1; + if (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50) + { + return false; + } + else + { + String instanceTypeName = getEcoreClassifier().getInstanceTypeName(); + if (instanceTypeName == null) + { + return false; + } + else + { + int index = instanceTypeName.indexOf('<'); + if (index == -1) + { + return false; + } + else + { + int end = instanceTypeName.lastIndexOf('>'); + if (end == -1) + { + return false; + } + else + { + // A generic type with only wild cards arguments is not an unchecked cast. + // + for (int i = index + 1 ; i < end; ++i) + { + char character = instanceTypeName.charAt(i); + switch (character) + { + case ' ': + case '?': + case ',': + case '>': + { + break; + } + default: + { + return true; + } + } + } + return false; + } + } + } + } } public String getImportedParameterizedInstanceClassName() diff --git a/plugins/org.eclipse.emf.codegen/src/org/eclipse/emf/codegen/util/ImportManager.java b/plugins/org.eclipse.emf.codegen/src/org/eclipse/emf/codegen/util/ImportManager.java index e6a95d40d..ee8814c66 100644 --- a/plugins/org.eclipse.emf.codegen/src/org/eclipse/emf/codegen/util/ImportManager.java +++ b/plugins/org.eclipse.emf.codegen/src/org/eclipse/emf/codegen/util/ImportManager.java @@ -324,6 +324,8 @@ public class ImportManager case '<': case '>': case '&': + case '[': + case ']': { if (start != i) { |