aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schuster <thebohemian@gmx.net>2005-04-29 06:11:27 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2005-04-29 06:11:27 +0000
commit7789e4818a0fb0a2d944ab6eb2907a32d2393fb8 (patch)
tree8b891280570aeee72e08a8b18e80a6cacbeefad4
parent1a7bfcc32d0a4b41e86c541cc48b80f529ca8818 (diff)
downloadgcc-7789e4818a0fb0a2d944ab6eb2907a32d2393fb8.zip
gcc-7789e4818a0fb0a2d944ab6eb2907a32d2393fb8.tar.gz
gcc-7789e4818a0fb0a2d944ab6eb2907a32d2393fb8.tar.bz2
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. From-SVN: r98975
-rw-r--r--libjava/ChangeLog13
-rw-r--r--libjava/java/beans/FeatureDescriptor.java14
-rw-r--r--libjava/java/beans/Introspector.java70
3 files changed, 75 insertions, 22 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index f9d07a6..9ea3de5 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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
diff --git a/libjava/java/beans/FeatureDescriptor.java b/libjava/java/beans/FeatureDescriptor.java
index 68141cf..0d20c55 100644
--- a/libjava/java/beans/FeatureDescriptor.java
+++ b/libjava/java/beans/FeatureDescriptor.java
@@ -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;
}
/**
diff --git a/libjava/java/beans/Introspector.java b/libjava/java/beans/Introspector.java
index f9b9569..59e17d9 100644
--- a/libjava/java/beans/Introspector.java
+++ b/libjava/java/beans/Introspector.java
@@ -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;