From eb1c33549bbcb99ecca9e13b21cd1134f5a7f568 Mon Sep 17 00:00:00 2001 From: Marcel Kronfeld Date: Thu, 5 May 2011 11:09:07 +0000 Subject: [PATCH] Try unboxing when searching for an editor --- src/eva2/gui/BeanInspector.java | 17 ++++++++++++++++ src/eva2/gui/PropertyEditorProvider.java | 26 ++++++++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/eva2/gui/BeanInspector.java b/src/eva2/gui/BeanInspector.java index 865193f7..d0d56b66 100644 --- a/src/eva2/gui/BeanInspector.java +++ b/src/eva2/gui/BeanInspector.java @@ -509,6 +509,23 @@ public class BeanInspector { } else return null; } + /** + * For a Java primitive wrapper class return the corresponding + * primitive class. + **/ + public static Class getUnboxedType(Class cls) { + if (cls == Double.class) return double.class; + else if (cls == Character.class) return char.class; + else if (cls == Integer.class) return int.class; + else if (cls == Boolean.class) return boolean.class; + else if (cls == Byte.class) return byte.class; + else if (cls == Short.class) return short.class; + else if (cls == Long.class) return long.class; + else if (cls == Float.class) return float.class; + else if (cls == Void.class) return void.class; + else return null; + } + /** * Just concatenates getClassDescription(obj) and getMemberDescriptions(obj, withValues). * diff --git a/src/eva2/gui/PropertyEditorProvider.java b/src/eva2/gui/PropertyEditorProvider.java index 83c1d2c4..e689d33f 100644 --- a/src/eva2/gui/PropertyEditorProvider.java +++ b/src/eva2/gui/PropertyEditorProvider.java @@ -90,7 +90,7 @@ public class PropertyEditorProvider { PropertyEditor editor = null; Class pec = prop.getPropertyEditorClass(); Class type = prop.getPropertyType(); - + if (TRACE) System.out.println("PropertyEditorProvider: Searching editor for " + value.getClass()); try { if (pec != null) editor = (PropertyEditor)pec.newInstance(); } catch (Exception e) { @@ -102,16 +102,30 @@ public class PropertyEditorProvider { //@todo Streiche: Here i'm looking for a specialized editor //if (TRACE) System.out.println("PropertySheetPanel.setTarget(): trying to find specialised editor for "+value.getClass()+"."); + if (TRACE) System.out.println("A PropertySheetPanel.makeEditor(): checking " + value.getClass()); if (value != null) editor = PropertyEditorManager.findEditor(value.getClass()); if (TRACE) System.out.println((editor == null ) ? "No editor from PEM" : ("Found " + editor.getClass())); - - if (editor == null) editor = PropertyEditorManager.findEditor(type); - if (TRACE) System.out.println((editor == null ) ? "No editor from PEM by type" : ("Found " + editor.getClass())); - + if (editor == null && (BeanInspector.isJavaPrimitive(value.getClass()))) { - Class prim = BeanInspector.getJavaPrimitive(value.getClass()); + Class prim = BeanInspector.getBoxedType(value.getClass()); + if (TRACE) System.out.println("B1 PropertySheetPanel.makeEditor(): checking " + prim); if (prim!=null) editor = PropertyEditorManager.findEditor(prim); + if (editor ==null) { + if (TRACE) System.out.println((editor == null ) ? "No editor from PEM by boxed type " : ("Found " + editor.getClass())); + + prim = BeanInspector.getUnboxedType(value.getClass()); + if (TRACE) System.out.println("B2 PropertySheetPanel.makeEditor(): checking " + prim); + if (prim!=null) editor = PropertyEditorManager.findEditor(prim); + if (TRACE) System.out.println((editor == null ) ? "No editor from PEM by unboxed type " : ("Found " + editor.getClass())); + } } + + if (editor == null) { + if (TRACE) System.out.println("C PropertySheetPanel.makeEditor(): checking " + type); + editor = PropertyEditorManager.findEditor(type); + if (TRACE) System.out.println((editor == null ) ? "No editor from PEM by type" : ("Found " + editor.getClass())); + } + if ((editor == null) && useDefaultGOE ) { if (type.isArray()) editor = new GenericArrayEditor(); else if (type.isEnum()) editor = new EnumEditor();