[Patch] java.util.ResourceBundle

Michael Koch konqueror@gmx.de
Fri Apr 29 06:12:00 GMT 2005


Hi list,


I commited the attached patch to merge the latest java.beans code from
GNU classpath.


Michael


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.

-------------- next part --------------
Index: java/beans/FeatureDescriptor.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/beans/FeatureDescriptor.java,v
retrieving revision 1.5
diff -u -r1.5 FeatureDescriptor.java
--- java/beans/FeatureDescriptor.java	4 Dec 2003 19:36:13 -0000	1.5
+++ java/beans/FeatureDescriptor.java	29 Apr 2005 06:10:45 -0000
@@ -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 @@
  *
  * @author John Keiser
  * @since 1.1
- * @version 1.1.0, 31 May 1998
  */
 
 public class FeatureDescriptor
@@ -99,10 +98,13 @@
 
   /**
    * 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 @@
 
   /**
    * 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: java/beans/Introspector.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/beans/Introspector.java,v
retrieving revision 1.8
diff -u -r1.8 Introspector.java
--- java/beans/Introspector.java	30 Sep 2004 14:54:12 -0000	1.8
+++ java/beans/Introspector.java	29 Apr 2005 06:10:45 -0000
@@ -220,6 +220,12 @@
   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 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 @@
 	  }
       }
     
-    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 @@
 	return null;
       }
   }
-  
+
   static BeanInfo copyBeanInfo(BeanInfo b) 
   {
     java.awt.Image[] icons = new java.awt.Image[4];
@@ -396,13 +404,15 @@
       {
 	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 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 @@
 		    propertyStopClass = beanClass;
 		  }
 	      }
+
 	    if(explicitEventSetDescriptors == null) 
 	      {
 		if(explicit.getEventSetDescriptors() != null) 
@@ -457,6 +477,7 @@
 		    eventStopClass = beanClass;
 		  }
 	      }
+
 	    if(explicitMethodDescriptors == null) 
 	      {
 		if(explicit.getMethodDescriptors() != null) 
@@ -465,6 +486,7 @@
 		    methodStopClass = beanClass;
 		  }
 	      }
+
 	    if(im[0] == null && im[1] == null 
 	       && im[2] == null && im[3] == null) 
 	      {
@@ -476,22 +498,30 @@
 	  }
 	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 @@
 				     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;


More information about the Java-patches mailing list