diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | java/beans/PropertyDescriptor.java | 67 |
2 files changed, 74 insertions, 0 deletions
@@ -1,3 +1,10 @@ +2006-03-04 Tom Tromey <tromey@redhat.com> + + * java/beans/PropertyDescriptor.java (createPropertyEditor): New + method. + (findConstructor): Likewise. + (instantiateClass): Likewise. + 2006-03-04 Audrius Meskauskas <AudriusA@Bioinformatics.org> * gnu/java/rmi/dgc/DGCImpl.java: More comments, boilerplate fix. diff --git a/java/beans/PropertyDescriptor.java b/java/beans/PropertyDescriptor.java index a22d6252e..da2ca78ae 100644 --- a/java/beans/PropertyDescriptor.java +++ b/java/beans/PropertyDescriptor.java @@ -37,6 +37,8 @@ exception statement from your version. */ package java.beans; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** @@ -344,6 +346,71 @@ public class PropertyDescriptor extends FeatureDescriptor this.propertyEditorClass = propertyEditorClass; } + /** + * Instantiate a property editor using the property editor class. + * If no property editor class has been set, this will return null. + * If the editor class has a public constructor which takes a single + * argument, that will be used and the bean parameter will be passed + * to it. Otherwise, a public no-argument constructor will be used, + * if available. This method will return null if no constructor is + * found or if construction fails for any reason. + * @param bean the argument to the constructor + * @return a new PropertyEditor, or null on error + * @since 1.5 + */ + public PropertyEditor createPropertyEditor(Object bean) + { + if (propertyEditorClass == null) + return null; + Constructor c = findConstructor(propertyEditorClass, + new Class[] { Object.class }); + if (c != null) + return instantiateClass(c, new Object[] { bean }); + c = findConstructor(propertyEditorClass, null); + if (c != null) + return instantiateClass(c, null); + return null; + } + + // Helper method to look up a constructor and return null if it is not + // found. + private Constructor findConstructor(Class k, Class[] argTypes) + { + try + { + return k.getConstructor(argTypes); + } + catch (NoSuchMethodException _) + { + return null; + } + } + + // Helper method to instantiate an object but return null on error. + private PropertyEditor instantiateClass(Constructor c, Object[] args) + { + try + { + return (PropertyEditor) c.newInstance(args); + } + catch (InstantiationException _) + { + return null; + } + catch (InvocationTargetException _) + { + return null; + } + catch (IllegalAccessException _) + { + return null; + } + catch (ClassCastException _) + { + return null; + } + } + private void findMethods( Class beanClass, String getMethodName1, |