diff options
author | Robert Schuster <thebohemian@gmx.net> | 2005-04-29 06:11:27 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2005-04-29 06:11:27 +0000 |
commit | 7789e4818a0fb0a2d944ab6eb2907a32d2393fb8 (patch) | |
tree | 8b891280570aeee72e08a8b18e80a6cacbeefad4 | |
parent | 1a7bfcc32d0a4b41e86c541cc48b80f529ca8818 (diff) | |
download | gcc-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/ChangeLog | 13 | ||||
-rw-r--r-- | libjava/java/beans/FeatureDescriptor.java | 14 | ||||
-rw-r--r-- | libjava/java/beans/Introspector.java | 70 |
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; |