2005-04-29 Robert Schuster <thebohemian@gmx.net>
authorRobert Schuster <thebohemian@gmx.net>
Fri, 29 Apr 2005 06:11:27 +0000 (06:11 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Fri, 29 Apr 2005 06:11:27 +0000 (06:11 +0000)
* java/beans/FeatureDescriptor.java:
(getShortDescription): Implemented fallback mechanism and fixed
documentation (fixes bug #12637).
(getDisplayName): Dito.

2005-04-29  Robert Schuster  <thebohemian@gmx.net>

* java/beans/Introspector.java: Fixed bug #12624, BeanDescriptors
will now be set correctly.
(flushCaches): Now flushes all cached intermediate data.

From-SVN: r98975

libjava/ChangeLog
libjava/java/beans/FeatureDescriptor.java
libjava/java/beans/Introspector.java

index f9d07a6ac5a156c782529aecc78391f5a85fb8ab..9ea3de597cb50774fc11cc3d9f76cc416ed9b300 100644 (file)
@@ -1,3 +1,16 @@
+2005-04-29  Robert Schuster  <thebohemian@gmx.net>
+
+       * java/beans/FeatureDescriptor.java:
+       (getShortDescription): Implemented fallback mechanism and fixed
+       documentation (fixes bug #12637).
+       (getDisplayName): Dito.
+
+2005-04-29  Robert Schuster  <thebohemian@gmx.net>
+
+       * java/beans/Introspector.java: Fixed bug #12624, BeanDescriptors
+       will now be set correctly.
+       (flushCaches): Now flushes all cached intermediate data.
+
 2005-04-28  Michael Koch  <konqueror@gmx.de>
 
        * java/net/InetAddress.java
index 68141cf2f4495f74ce8c4e8dde6c3e933d72e0da..0d20c5539ae4d6d54493cc4bc1417b9df8ab9f5b 100644 (file)
@@ -1,5 +1,5 @@
 /* java.beans.FeatureDescriptor
-   Copyright (C) 1998 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -57,7 +57,6 @@ import java.util.Hashtable;
  *
  * @author John Keiser
  * @since 1.1
- * @version 1.1.0, 31 May 1998
  */
 
 public class FeatureDescriptor
@@ -99,10 +98,13 @@ public class FeatureDescriptor
 
   /**
    * Get the localized (display) name of this feature.
+   *
+   * @returns The localized display name of this feature or falls
+   * back to the programmatic name.
    */
   public String getDisplayName()
   {
-    return displayName;
+    return (displayName == null) ? name : displayName;
   }
 
   /**
@@ -117,10 +119,14 @@ public class FeatureDescriptor
 
   /**
    * Get the localized short description for this feature.
+   *
+   * @returns A short localized description of this feature or
+   * what <code>getDisplayName</code> returns in case, that no short description
+   * is available.
    */
   public String getShortDescription()
   {
-    return shortDescription;
+    return (shortDescription == null) ? getDisplayName() : shortDescription;
   }
 
   /**
index f9b95696ce3f55263e20b7b752f8e066979d87f6..59e17d9e94b16fcfd362b05e086b42052d0be884 100644 (file)
@@ -220,6 +220,12 @@ public class Introspector {
   public static void flushCaches()
   {
     beanInfoCache.clear();
+
+       // Clears all the intermediate ExplicitInfo instances which
+       // have been created.
+       // This makes sure we have to retrieve stuff like BeanDescriptors
+       // again. (Remember that FeatureDescriptor can be modified by the user.)
+       ExplicitInfo.flushCaches();
   }
 
   /**
@@ -252,8 +258,8 @@ public class Introspector {
   public static BeanInfo getBeanInfo(Class beanClass, Class stopClass) 
     throws IntrospectionException 
   {
-    ExplicitInfo explicit = new ExplicitInfo(beanClass,stopClass);
-    
+    ExplicitInfo explicit = new ExplicitInfo(beanClass, stopClass);
+
     IntrospectionIncubator ii = new IntrospectionIncubator();
     ii.setPropertyStopClass(explicit.propertyStopClass);
     ii.setEventStopClass(explicit.eventStopClass);
@@ -303,15 +309,17 @@ public class Introspector {
          }
       }
     
-    if(explicit.explicitBeanDescriptor != null) 
-      {
-       currentInfo.setBeanDescriptor(new BeanDescriptor(beanClass,explicit.explicitBeanDescriptor.getCustomizerClass()));
-      } 
-    else 
-      {
-       currentInfo.setBeanDescriptor(new BeanDescriptor(beanClass,null));
-      }
-    
+       // Sets the info's BeanDescriptor to the one we extracted from the
+       // explicit BeanInfo instance(s) if they contained one. Otherwise we
+       // create the BeanDescriptor from scratch.
+       // Note: We do not create a copy the retrieved BeanDescriptor which will allow
+       // the user to modify the instance while it is cached. However this is how
+       // the RI does it.
+       currentInfo.setBeanDescriptor(
+               (explicit.explicitBeanDescriptor == null ? 
+                       new BeanDescriptor(beanClass, null) :
+                       explicit.explicitBeanDescriptor));
+
     currentInfo.setAdditionalBeanInfo(explicit.explicitBeanInfo);
     currentInfo.setIcons(explicit.im);
     
@@ -388,7 +396,7 @@ public class Introspector {
        return null;
       }
   }
-  
+
   static BeanInfo copyBeanInfo(BeanInfo b) 
   {
     java.awt.Image[] icons = new java.awt.Image[4];
@@ -396,13 +404,15 @@ public class Introspector {
       {
        icons[i-1] = b.getIcon(i);
       }
+
     return new ExplicitBeanInfo(b.getBeanDescriptor(),
                                b.getAdditionalBeanInfo(),
                                b.getPropertyDescriptors(),
                                b.getDefaultPropertyIndex(),
                                b.getEventSetDescriptors(),
                                b.getDefaultEventIndex(),
-                               b.getMethodDescriptors(),icons);
+                               b.getMethodDescriptors(),
+                               icons);
   }
 }
 
@@ -423,22 +433,31 @@ class ExplicitInfo
   Class propertyStopClass;
   Class eventStopClass;
   Class methodStopClass;
-  
+
+  static Hashtable explicitBeanInfos = new Hashtable();
+  static Vector emptyBeanInfos = new Vector();
+
   ExplicitInfo(Class beanClass, Class stopClass) 
   {
     while(beanClass != null && !beanClass.equals(stopClass)) 
       {
+
        BeanInfo explicit = findExplicitBeanInfo(beanClass);
+       
+
        if(explicit != null) 
          {
+
            if(explicitBeanDescriptor == null) 
              {
                explicitBeanDescriptor = explicit.getBeanDescriptor();
              }
+
            if(explicitBeanInfo == null) 
              {
                explicitBeanInfo = explicit.getAdditionalBeanInfo();
              }
+
            if(explicitPropertyDescriptors == null) 
              {
                if(explicit.getPropertyDescriptors() != null) 
@@ -448,6 +467,7 @@ class ExplicitInfo
                    propertyStopClass = beanClass;
                  }
              }
+
            if(explicitEventSetDescriptors == null) 
              {
                if(explicit.getEventSetDescriptors() != null) 
@@ -457,6 +477,7 @@ class ExplicitInfo
                    eventStopClass = beanClass;
                  }
              }
+
            if(explicitMethodDescriptors == null) 
              {
                if(explicit.getMethodDescriptors() != null) 
@@ -465,6 +486,7 @@ class ExplicitInfo
                    methodStopClass = beanClass;
                  }
              }
+
            if(im[0] == null && im[1] == null 
               && im[2] == null && im[3] == null) 
              {
@@ -476,22 +498,30 @@ class ExplicitInfo
          }
        beanClass = beanClass.getSuperclass();
       }
+
     if(propertyStopClass == null) 
       {
        propertyStopClass = stopClass;
       }
+
     if(eventStopClass == null) 
       {
        eventStopClass = stopClass;
       }
+
     if(methodStopClass == null) 
       {
        methodStopClass = stopClass;
       }
   }
   
-  static Hashtable explicitBeanInfos = new Hashtable();
-  static Vector emptyBeanInfos = new Vector();
+  /** Throws away all cached data and makes sure we re-instantiate things
+    * like BeanDescriptors again.
+    */
+  static void flushCaches() {
+       explicitBeanInfos.clear();
+       emptyBeanInfos.clear();
+  }
   
   static BeanInfo findExplicitBeanInfo(Class beanClass) 
   {
@@ -539,9 +569,13 @@ class ExplicitInfo
                                     Introspector.beanInfoSearchPath[i] + "."
                                     + newName);
 
-           if (beanInfo != null)
+               // Returns the beanInfo if it exists and the described class matches
+               // the one we searched.
+           if (beanInfo != null && beanInfo.getBeanDescriptor() != null &&
+                       beanInfo.getBeanDescriptor().getBeanClass() == beanClass)
+
              return beanInfo;
-         } 
+         }
       }
 
     return beanInfo;