classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [patch] Small fix for java.beans


From: Arnaud Vandyck
Subject: Re: [patch] Small fix for java.beans
Date: Fri, 24 Oct 2003 17:22:12 +0200 (CEST)

On Fri, 24 Oct 2003 16:46:20 +0200 (CEST)
Arnaud Vandyck <address@hidden> wrote:

> On Fri, 24 Oct 2003 16:21:47 +0200
> Mark Wielaard <address@hidden> wrote:
> 
> [gnu/java/beans/IntrospectionIncubator.java]
> 
> > That file is really badly  formatted (but was already in the Classpath
> > tree).  If  someone  wants  to  clean  that up,  that  would  be  very
> > appreciated.
> 
> I have to learn so I can reformat this file. I'll send a patch asap ;)

Attached is the patch and here is the Changelog entry:
2003-10-24 Arnaud Vandyck <address@hidden>

        * gnu/java/beans/IntrospectionIncubator.java: reformated to conform to
    the GNU standards

Waiting for your comments, thanks,

-- Arnaud Vandyck, STE fi, ULg
   Formateur Cellule Programmation.
Index: IntrospectionIncubator.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/beans/IntrospectionIncubator.java,v
retrieving revision 1.11
diff -u -r1.11 IntrospectionIncubator.java
--- IntrospectionIncubator.java 24 Oct 2003 14:19:35 -0000      1.11
+++ IntrospectionIncubator.java 24 Oct 2003 15:16:55 -0000
@@ -53,303 +53,383 @@
  ** @see java.beans.BeanInfo
  **/
 
-public class IntrospectionIncubator {
-       Hashtable propertyMethods = new Hashtable();
-       Hashtable listenerMethods = new Hashtable();
-       Vector otherMethods = new Vector();
-
-       Class propertyStopClass;
-       Class eventStopClass;
-       Class methodStopClass;
-
-       public IntrospectionIncubator() {
-       }
-
-       /* Paving the way for automatic Introspection */
-       public void addMethod(Method method) {
-               if(Modifier.isPublic(method.getModifiers())) {
-                       String name = 
ClassHelper.getTruncatedName(method.getName());
-                       Class retType = method.getReturnType();
-                       Class[] params = method.getParameterTypes();
-                       boolean isVoid = retType.equals(java.lang.Void.TYPE);
-                       Class methodClass = method.getDeclaringClass();
-                       if(propertyStopClass == null || 
(propertyStopClass.isAssignableFrom(methodClass) && 
!propertyStopClass.equals(methodClass))) {
-                               if(name.startsWith("is")
-                                  && retType.equals(java.lang.Boolean.TYPE)
-                                  && params.length == 0) {
-                                       addToPropertyHash(name,method,IS);
-                               } else if(name.startsWith("get") && !isVoid) {
-                                       if(params.length == 0) {
-                                               
addToPropertyHash(name,method,GET);
-                                       } else if(params.length == 1 && 
params[0].equals(java.lang.Integer.TYPE)) {
-                                               
addToPropertyHash(name,method,GET_I);
-                                       } else {
-                                               otherMethods.addElement(method);
-                                       }
-                               } else if(name.startsWith("set") && isVoid) {
-                                       if(params.length == 1) {
-                                               
addToPropertyHash(name,method,SET);
-                                       } else if(params.length == 2 && 
params[0].equals(java.lang.Integer.TYPE)) {
-                                               
addToPropertyHash(name,method,SET_I);
-                                       } else {
-                                               otherMethods.addElement(method);
-                                       }
-                               }
-                       }
-                       if(eventStopClass == null || 
(eventStopClass.isAssignableFrom(methodClass) && 
!eventStopClass.equals(methodClass))) {
-                               if(name.startsWith("add")
-                                         && isVoid
-                                         && params.length == 1
-                                         && 
java.util.EventListener.class.isAssignableFrom(params[0])) {
-                                       addToListenerHash(name,method,ADD);
-                               } else if(name.startsWith("remove")
-                                         && isVoid
-                                         && params.length == 1
-                                         && 
java.util.EventListener.class.isAssignableFrom(params[0])) {
-                                       addToListenerHash(name,method,REMOVE);
-                               }
-                       }
-                       if(methodStopClass == null || 
(methodStopClass.isAssignableFrom(methodClass) && 
!methodStopClass.equals(methodClass))) {
-                               otherMethods.addElement(method);
-                       }
-               }
-       }
-
-       public void addMethods(Method[] m) {
-               for(int i=0;i<m.length;i++) {
-                       addMethod(m[i]);
-               }
-       }
-
-       public void setPropertyStopClass(Class c) {
-               propertyStopClass = c;
-       }
-
-       public void setEventStopClass(Class c) {
-               eventStopClass = c;
-       }
-
-       public void setMethodStopClass(Class c) {
-               methodStopClass = c;
-       }
-
-
-       public BeanInfoEmbryo getBeanInfoEmbryo() throws IntrospectionException 
{
-               BeanInfoEmbryo b = new BeanInfoEmbryo();
-               findXXX(b,IS);
-               findXXXInt(b,GET_I);
-               findXXXInt(b,SET_I);
-               findXXX(b,GET);
-               findXXX(b,SET);
-               findAddRemovePairs(b);
-               for(int i=0;i<otherMethods.size();i++) {
-                       MethodDescriptor newMethod = new 
MethodDescriptor((Method)otherMethods.elementAt(i));
-                       if(!b.hasMethod(newMethod)) {
-                               b.addMethod(new 
MethodDescriptor((Method)otherMethods.elementAt(i)));
-                       }
-               }
-               return b;
-       }
-
-       public BeanInfo getBeanInfo() throws IntrospectionException {
-               return getBeanInfoEmbryo().getBeanInfo();
-       }
-
-
-       void findAddRemovePairs(BeanInfoEmbryo b) throws IntrospectionException 
{
-               Enumeration listenerEnum = listenerMethods.keys();
-               while(listenerEnum.hasMoreElements()) {
-                       DoubleKey k = (DoubleKey)listenerEnum.nextElement();
-                       Method[] m = (Method[])listenerMethods.get(k);
-                       if(m[ADD] != null && m[REMOVE] != null) {
-                               EventSetDescriptor e = new 
EventSetDescriptor(Introspector.decapitalize(k.getName()),
-                                                                             
k.getType(), k.getType().getMethods(),
-                                                                             
m[ADD],m[REMOVE]);
-                               
e.setUnicast(ArrayHelper.contains(m[ADD].getExceptionTypes(),java.util.TooManyListenersException.class));
-                               if(!b.hasEvent(e)) {
-                                       b.addEvent(e);
-                               }
-                       }
-               }
-       }
-
-       void findXXX(BeanInfoEmbryo b, int funcType) throws 
IntrospectionException {
-               Enumeration keys = propertyMethods.keys();
-               while(keys.hasMoreElements()) {
-                       DoubleKey k = (DoubleKey)keys.nextElement();
-                       Method[] m = (Method[])propertyMethods.get(k);
-                       if(m[funcType] != null) {
-                               PropertyDescriptor p = new 
PropertyDescriptor(Introspector.decapitalize(k.getName()),
-                                                                    m[IS] != 
null ? m[IS] : m[GET],
-                                                                    m[SET]);
-                               if(m[SET] != null) {
-                                       
p.setConstrained(ArrayHelper.contains(m[SET].getExceptionTypes(),java.beans.PropertyVetoException.class));
-                               }
-                               if(!b.hasProperty(p)) {
-                                       b.addProperty(p);
-                               }
-                       }
-               }
-       }
-
-       void findXXXInt(BeanInfoEmbryo b, int funcType) throws 
IntrospectionException {
-               Enumeration keys = propertyMethods.keys();
-               while(keys.hasMoreElements()) {
-                       DoubleKey k = (DoubleKey)keys.nextElement();
-                       Method[] m = (Method[])propertyMethods.get(k);
-                       if(m[funcType] != null) {
-                               boolean constrained;
-                               if(m[SET_I] != null) {
-                                       constrained = 
ArrayHelper.contains(m[SET_I].getExceptionTypes(),java.beans.PropertyVetoException.class);
-                               } else {
-                                       constrained = false;
-                               }
-
-                               /** Find out if there is an array type get or 
set **/
-                               Class arrayType = 
Array.newInstance(k.getType(),0).getClass();
-                               DoubleKey findSetArray = new 
DoubleKey(arrayType,k.getName());
-                               Method[] m2 = 
(Method[])propertyMethods.get(findSetArray);
-                               IndexedPropertyDescriptor p;
-                               if(m2 == null) {
-                                       p = new 
IndexedPropertyDescriptor(Introspector.decapitalize(k.getName()),
-                                                                         
null,null,
-                                                                         
m[GET_I],m[SET_I]);
-                               } else {
-                                       if(constrained && m2[SET] != null) {
-                                               constrained = 
ArrayHelper.contains(m2[SET].getExceptionTypes(),java.beans.PropertyVetoException.class);
-                                       }
-                                       p = new 
IndexedPropertyDescriptor(Introspector.decapitalize(k.getName()),
-                                                                         
m2[GET],m2[SET],
-                                                                         
m[GET_I],m[SET_I]);
-                               }
-                               p.setConstrained(constrained);
-                               if(!b.hasProperty(p)) {
-                                       b.addProperty(p);
-                               }
-                       }
-               }
-       }
-
-       static final int IS=0;
-       static final int GET_I=1;
-       static final int SET_I=2;
-       static final int GET=3;
-       static final int SET=4;
-
-       static final int ADD=0;
-       static final int REMOVE=1;
-
-       void addToPropertyHash(String name, Method method, int funcType) {
-               String newName;
-               Class type;
-
-               switch(funcType) {
-                       case IS:
-                               type = java.lang.Boolean.TYPE;
-                               newName = name.substring(2);
-                               break;
-                       case GET_I:
-                               type = method.getReturnType();
-                               newName = name.substring(3);
-                               break;
-                       case SET_I:
-                               type = method.getParameterTypes()[1];
-                               newName = name.substring(3);
-                               break;
-                       case GET:
-                               type = method.getReturnType();
-                               newName = name.substring(3);
-                               break;
-                       case SET:
-                               type = method.getParameterTypes()[0];
-                               newName = name.substring(3);
-                               break;
-                       default:
-                               return;
-               }
-               newName = capitalize(newName);
-
-               DoubleKey k = new DoubleKey(type,newName);
-               Method[] methods = (Method[])propertyMethods.get(k);
-               if(methods == null) {
-                       methods = new Method[5];
-                       propertyMethods.put(k,methods);
-               }
-               methods[funcType] = method;
-       }
-
-
-       void addToListenerHash(String name, Method method, int funcType) {
-               String newName;
-               Class type;
-
-               switch(funcType) {
-                       case ADD:
-                               type = method.getParameterTypes()[0];
-                               newName = name.substring(3,name.length()-8);
-                               break;
-                       case REMOVE:
-                               type = method.getParameterTypes()[0];
-                               newName = name.substring(6,name.length()-8);
-                               break;
-                       default:
-                               return;
-               }
-               newName = capitalize(newName);
-
-               DoubleKey k = new DoubleKey(type,newName);
-               Method[] methods = (Method[])listenerMethods.get(k);
-               if(methods == null) {
-                       methods = new Method[2];
-                       listenerMethods.put(k,methods);
-               }
-               methods[funcType] = method;
-       }
-
-       static String capitalize(String name) {
-               try {
-                       if(Character.isUpperCase(name.charAt(0))) {
-                               return name;
-                       } else {
-                               char[] c = name.toCharArray();
-                               c[0] = Character.toLowerCase(c[0]);
-                               return new String(c);
-                       }
-               } catch(StringIndexOutOfBoundsException E) {
-                       return name;
-               } catch(NullPointerException E) {
-                       return null;
-               }
-       }
+public class IntrospectionIncubator
+{
+  Hashtable propertyMethods = new Hashtable ();
+  Hashtable listenerMethods = new Hashtable ();
+  Vector otherMethods = new Vector ();
+  
+  Class propertyStopClass;
+  Class eventStopClass;
+  Class methodStopClass;
+  
+  public IntrospectionIncubator ()
+  {
+  }
+  
+  /* Paving the way for automatic Introspection */
+  public void addMethod (Method method)
+  {
+    if (Modifier.isPublic (method.getModifiers ()))
+      {
+        String name = ClassHelper.getTruncatedName (method.getName ());
+        Class retType = method.getReturnType ();
+        Class[] params = method.getParameterTypes ();
+        boolean isVoid = retType.equals (java.lang.Void.TYPE);
+        Class methodClass = method.getDeclaringClass ();
+        if (propertyStopClass == null || (propertyStopClass.isAssignableFrom 
(methodClass) && !propertyStopClass.equals (methodClass)))
+          {
+            if (name.startsWith ("is")
+                && retType.equals (java.lang.Boolean.TYPE)
+                && params.length == 0)
+              {
+                addToPropertyHash (name,method,IS);
+              }
+            else if (name.startsWith ("get") && !isVoid)
+              {
+                if (params.length == 0)
+                  {
+                    addToPropertyHash (name,method,GET);
+                  }
+                else if (params.length == 1 && params[0].equals 
(java.lang.Integer.TYPE))
+                  {
+                    addToPropertyHash (name,method,GET_I);
+                  }
+                else
+                  {
+                    otherMethods.addElement (method);
+                  }
+              }
+            else if (name.startsWith ("set") && isVoid)
+              {
+                if (params.length == 1)
+                  {
+                    addToPropertyHash (name,method,SET);
+                  }
+                else if (params.length == 2 && params[0].equals 
(java.lang.Integer.TYPE))
+                  {
+                    addToPropertyHash (name,method,SET_I);
+                  }
+                else
+                  {
+                    otherMethods.addElement (method);
+                  }
+              }
+          }
+        if (eventStopClass == null || (eventStopClass.isAssignableFrom 
(methodClass) && !eventStopClass.equals (methodClass)))
+          {
+            if (name.startsWith ("add")
+                && isVoid
+                && params.length == 1
+                && java.util.EventListener.class.isAssignableFrom (params[0]))
+              {
+                addToListenerHash (name,method,ADD);
+              }
+            else if (name.startsWith ("remove")
+                     && isVoid
+                     && params.length == 1
+                     && java.util.EventListener.class.isAssignableFrom 
(params[0]))
+              {
+                addToListenerHash (name,method,REMOVE);
+              }
+          }
+        if (methodStopClass == null || (methodStopClass.isAssignableFrom 
(methodClass) && !methodStopClass.equals (methodClass)))
+          {
+            otherMethods.addElement (method);
+          }
+      }
+  }
+  
+  public void addMethods (Method[] m)
+  {
+    for (int i=0;i<m.length;i++)
+      {
+        addMethod (m[i]);
+      }
+  }
+  
+  public void setPropertyStopClass (Class c)
+  {
+    propertyStopClass = c;
+  }
+  
+  public void setEventStopClass (Class c)
+  {
+    eventStopClass = c;
+  }
+  
+  public void setMethodStopClass (Class c)
+  {
+    methodStopClass = c;
+  }
+  
+  
+  public BeanInfoEmbryo getBeanInfoEmbryo ()
+    throws IntrospectionException
+  {
+    BeanInfoEmbryo b = new BeanInfoEmbryo ();
+    findXXX (b,IS);
+    findXXXInt (b,GET_I);
+    findXXXInt (b,SET_I);
+    findXXX (b,GET);
+    findXXX (b,SET);
+    findAddRemovePairs (b);
+    for (int i=0;i<otherMethods.size ();i++)
+      {
+        MethodDescriptor newMethod = new MethodDescriptor ( 
(Method)otherMethods.elementAt (i));
+        if(!b.hasMethod (newMethod))
+          {
+            b.addMethod (new MethodDescriptor ( 
(Method)otherMethods.elementAt(i)));
+          }
+      }
+    return b;
+  }
+  
+  public BeanInfo getBeanInfo () throws IntrospectionException
+  {
+    return getBeanInfoEmbryo ().getBeanInfo ();
+  }
+  
+  void findAddRemovePairs (BeanInfoEmbryo b)
+    throws IntrospectionException
+  {
+    Enumeration listenerEnum = listenerMethods.keys ();
+    while (listenerEnum.hasMoreElements ()) {
+      DoubleKey k = (DoubleKey)listenerEnum.nextElement ();
+      Method[] m = (Method[])listenerMethods.get (k);
+      if (m[ADD] != null && m[REMOVE] != null)
+        {
+          EventSetDescriptor e = new EventSetDescriptor 
(Introspector.decapitalize (k.getName()),
+                                                         k.getType (), 
k.getType ().getMethods (),
+                                                         m[ADD],m[REMOVE]);
+          e.setUnicast (ArrayHelper.contains (m[ADD].getExceptionTypes 
(),java.util.TooManyListenersException.class));
+          if (!b.hasEvent (e))
+            {
+              b.addEvent (e);
+            }
+        }
+    }
+  }
+  
+  void findXXX (BeanInfoEmbryo b, int funcType)
+    throws IntrospectionException
+  {
+    Enumeration keys = propertyMethods.keys ();
+    while (keys.hasMoreElements ())
+      {
+        DoubleKey k = (DoubleKey)keys.nextElement ();
+        Method[] m = (Method[])propertyMethods.get (k);
+        if (m[funcType] != null)
+          {
+            PropertyDescriptor p = new PropertyDescriptor 
(Introspector.decapitalize (k.getName()),
+                                                           m[IS] != null ? 
m[IS] : m[GET],
+                                                           m[SET]);
+            if (m[SET] != null)
+              {
+                p.setConstrained (ArrayHelper.contains 
(m[SET].getExceptionTypes (),java.beans.PropertyVetoException.class));
+              }
+            if (!b.hasProperty (p))
+              {
+                b.addProperty (p);
+              }
+          }
+      }
+  }
+  
+  void findXXXInt (BeanInfoEmbryo b, int funcType)
+    throws IntrospectionException
+  {
+    Enumeration keys = propertyMethods.keys ();
+    while (keys.hasMoreElements ())
+      {
+        DoubleKey k = (DoubleKey)keys.nextElement ();
+        Method[] m = (Method[])propertyMethods.get (k);
+        if (m[funcType] != null)
+          {
+            boolean constrained;
+            if (m[SET_I] != null)
+              {
+                constrained = ArrayHelper.contains (m[SET_I].getExceptionTypes 
(),java.beans.PropertyVetoException.class);
+              }
+            else
+              {
+                constrained = false;
+              }
+            
+            /** Find out if there is an array type get or set **/
+            Class arrayType = Array.newInstance (k.getType (),0).getClass ();
+            DoubleKey findSetArray = new DoubleKey (arrayType,k.getName ());
+            Method[] m2 = (Method[])propertyMethods.get (findSetArray);
+            IndexedPropertyDescriptor p;
+            if (m2 == null)
+              {
+                p = new IndexedPropertyDescriptor (Introspector.decapitalize 
(k.getName ()),
+                                                   null,null,
+                                                   m[GET_I],m[SET_I]);
+              }
+            else
+              {
+                if (constrained && m2[SET] != null)
+                  {
+                    constrained = ArrayHelper.contains 
(m2[SET].getExceptionTypes (),java.beans.PropertyVetoException.class);
+                  }
+                p = new IndexedPropertyDescriptor (Introspector.decapitalize 
(k.getName ()),
+                                                   m2[GET],m2[SET],
+                                                   m[GET_I],m[SET_I]);
+              }
+            p.setConstrained (constrained);
+            if (!b.hasProperty (p))
+              {
+                b.addProperty (p);
+              }
+          }
+      }
+  }
+  
+  static final int IS=0;
+  static final int GET_I=1;
+  static final int SET_I=2;
+  static final int GET=3;
+  static final int SET=4;
+  
+  static final int ADD=0;
+  static final int REMOVE=1;
+  
+  void addToPropertyHash (String name, Method method, int funcType)
+  {
+    String newName;
+    Class type;
+    
+    switch (funcType)
+      {
+      case IS:
+        type = java.lang.Boolean.TYPE;
+        newName = name.substring (2);
+        break;
+      case GET_I:
+        type = method.getReturnType ();
+        newName = name.substring (3);
+        break;
+      case SET_I:
+        type = method.getParameterTypes ()[1];
+        newName = name.substring (3);
+        break;
+      case GET:
+        type = method.getReturnType ();
+        newName = name.substring (3);
+        break;
+      case SET:
+        type = method.getParameterTypes ()[0];
+        newName = name.substring (3);
+        break;
+      default:
+        return;
+      }
+    newName = capitalize (newName);
+    
+    DoubleKey k = new DoubleKey (type,newName);
+    Method[] methods = (Method[])propertyMethods.get (k);
+    if (methods == null)
+      {
+        methods = new Method[5];
+        propertyMethods.put (k,methods);
+      }
+    methods[funcType] = method;
+  }
+  
+  
+  void addToListenerHash (String name, Method method, int funcType)
+  {
+    String newName;
+    Class type;
+    
+    switch (funcType)
+      {
+      case ADD:
+        type = method.getParameterTypes ()[0];
+        newName = name.substring (3,name.length ()-8);
+        break;
+      case REMOVE:
+        type = method.getParameterTypes ()[0];
+        newName = name.substring (6,name.length ()-8);
+        break;
+      default:
+        return;
+      }
+    newName = capitalize (newName);
+    
+    DoubleKey k = new DoubleKey (type,newName);
+    Method[] methods = (Method[])listenerMethods.get (k);
+    if (methods == null)
+      {
+        methods = new Method[2];
+        listenerMethods.put (k,methods);
+      }
+    methods[funcType] = method;
+  }
+  
+  static String capitalize (String name)
+  {
+    try
+      {
+        if (Character.isUpperCase (name.charAt (0)))
+          {
+            return name;
+          }
+        else
+          {
+            char[] c = name.toCharArray ();
+            c[0] = Character.toLowerCase (c[0]);
+            return new String (c);
+          }
+      }
+    catch (StringIndexOutOfBoundsException E)
+      {
+        return name;
+      }
+    catch (NullPointerException E)
+      {
+        return null;
+      }
+  }
 }
 
-class DoubleKey {
-       Class type;
-       String name;
-
-       DoubleKey(Class type, String name) {
-               this.type = type;
-               this.name = name;
-       }
-
-       Class getType() {
-               return type;
-       }
-
-       String getName() {
-               return name;
-       }
-
-       public boolean equals(Object o) {
-               if(o instanceof DoubleKey) {
-                       DoubleKey d = (DoubleKey)o;
-                       return d.type.equals(type) && d.name.equals(name);
-               } else {
-                       return false;
-               }
-       }
-
-       public int hashCode() {
-               return type.hashCode() ^ name.hashCode();
-       }
+class DoubleKey
+{
+  Class type;
+  String name;
+  
+  DoubleKey (Class type, String name)
+  {
+    this.type = type;
+    this.name = name;
+  }
+  
+  Class getType ()
+  {
+    return type;
+  }
+  
+  String getName ()
+  {
+    return name;
+  }
+  
+  public boolean equals (Object o)
+  {
+    if (o instanceof DoubleKey)
+      {
+        DoubleKey d = (DoubleKey)o;
+        return d.type.equals (type) && d.name.equals (name);
+      }
+    else
+      {
+        return false;
+      }
+  }
+  
+  public int hashCode ()
+  {
+    return type.hashCode () ^ name.hashCode ();
+  }
 }

reply via email to

[Prev in Thread] Current Thread [Next in Thread]