Bug 506564 - ClassCastException below
EMFFormsEditSupportImpl.getEnumLiteral (thrown in Class.cast)
Change-Id: Ia3c75c712eb9f63ffa3c40e89d505acbc6af5b04
Signed-off-by: Eugen Neufeld <eneufeld@eclipsesource.com>
diff --git a/bundles/org.eclipse.emfforms.core.services.editsupport/src/org/eclipse/emfforms/internal/core/services/editsupport/EMFFormsEditSupportImpl.java b/bundles/org.eclipse.emfforms.core.services.editsupport/src/org/eclipse/emfforms/internal/core/services/editsupport/EMFFormsEditSupportImpl.java
index b4a19cd..0229d89 100644
--- a/bundles/org.eclipse.emfforms.core.services.editsupport/src/org/eclipse/emfforms/internal/core/services/editsupport/EMFFormsEditSupportImpl.java
+++ b/bundles/org.eclipse.emfforms.core.services.editsupport/src/org/eclipse/emfforms/internal/core/services/editsupport/EMFFormsEditSupportImpl.java
@@ -13,9 +13,9 @@
import org.eclipse.core.databinding.observable.IObserving;
import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcorePackage;
@@ -201,12 +201,11 @@
private String getEnumLiteral(EStructuralFeature feature, Object element) {
final EClassifier featureType = feature.getEType();
+ final String enumName = getEnumName(element);
Bundle bundle;
try {
bundle = bundleResolver.getEditBundle(featureType);
- final String key = String.format(LITERAL_NAME, featureType.getName(),
- EEnum.class.cast(featureType).getEEnumLiteralByLiteral(
- Enum.class.cast(element).toString()).getName());
+ final String key = String.format(LITERAL_NAME, featureType.getName(), enumName);
return emfFormsLocalizationService.getString(bundle, key);
} catch (final NoBundleFoundException ex) {
// do nothing - see bug 467498
@@ -214,6 +213,16 @@
return null;
}
+ private String getEnumName(Object element) {
+ if (Enumerator.class.isInstance(element)) {
+ return Enumerator.class.cast(element).getName();
+ }
+ if (Enum.class.isInstance(element)) {
+ return Enum.class.cast(element).name();
+ }
+ return element.toString();
+ }
+
/**
* {@inheritDoc}
*