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
This commit is contained in:
Robert Schuster 2005-04-29 06:11:27 +00:00 committed by Michael Koch
parent 1a7bfcc32d
commit 7789e4818a
3 changed files with 75 additions and 22 deletions

View 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

View 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;
}
/**

View 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;