diff options
author | Tom Tromey <tromey@redhat.com> | 2006-03-04 20:25:39 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2006-03-04 20:25:39 +0000 |
commit | 812c5a072d5f8830e68c254f813f03ac52c144bf (patch) | |
tree | ee334c7164a9fe3002c057a5223fa40588210777 | |
parent | 2c072aeb6a4267018a95659d8b91849ffc297d07 (diff) | |
download | classpath-812c5a072d5f8830e68c254f813f03ac52c144bf.tar.gz |
* java/beans/PropertyDescriptor.java (createPropertyEditor): New
method.
(findConstructor): Likewise.
(instantiateClass): Likewise.
-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, |