You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by zh...@apache.org on 2010/05/13 11:20:01 UTC
svn commit: r943853 - in
/harmony/enhanced/java/trunk/classlib/modules/beans/src:
main/java/java/beans/Introspector.java
test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java
Author: zhoukevin
Date: Thu May 13 09:19:48 2010
New Revision: 943853
URL: http://svn.apache.org/viewvc?rev=943853&view=rev
Log:
Fix a defect of java.beans.Introspector class: If a class provides explicit BeanInfo about itself then we add that to the BeanInfo information we obtained from analyzing any derived classes. In addition, add a test case for recreation.
Modified:
harmony/enhanced/java/trunk/classlib/modules/beans/src/main/java/java/beans/Introspector.java
harmony/enhanced/java/trunk/classlib/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java
Modified: harmony/enhanced/java/trunk/classlib/modules/beans/src/main/java/java/beans/Introspector.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/beans/src/main/java/java/beans/Introspector.java?rev=943853&r1=943852&r2=943853&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/classlib/modules/beans/src/main/java/java/beans/Introspector.java (original)
+++ harmony/enhanced/java/trunk/classlib/modules/beans/src/main/java/java/beans/Introspector.java Thu May 13 09:19:48 2010
@@ -286,36 +286,42 @@ public class Introspector extends java.l
}
private static BeanInfo getExplicitBeanInfo(Class<?> beanClass) {
- BeanInfo theBeanInfo = null;
String beanInfoClassName = beanClass.getName() + "BeanInfo"; //$NON-NLS-1$
- try{
- theBeanInfo = loadBeanInfo(beanInfoClassName, beanClass);
- return theBeanInfo;
- }catch(Exception e){
- //fall through
+ try {
+ return loadBeanInfo(beanInfoClassName, beanClass);
+ } catch (Exception e) {
+ // fall through
}
+
int index = beanInfoClassName.lastIndexOf('.');
- String beanInfoName = index>=0? beanInfoClassName.substring(index+1):beanInfoClassName;
+ String beanInfoName = index >= 0 ? beanInfoClassName
+ .substring(index + 1) : beanInfoClassName;
+ BeanInfo theBeanInfo = null;
+ BeanDescriptor beanDescriptor = null;
for (int i = 0; i < searchPath.length; i++) {
beanInfoClassName = searchPath[i] + "." + beanInfoName; //$NON-NLS-1$
- try{
+ try {
theBeanInfo = loadBeanInfo(beanInfoClassName, beanClass);
-
- // find the beanInfo of the given beanClass, check whether the
- // beanInfo is consistent with the given beanClass
- Class<?> beanClassOfBeanInfo = theBeanInfo.getBeanDescriptor()
- .getBeanClass();
- if (beanClassOfBeanInfo.equals(beanClass)) {
- break;
- }
- }catch(Exception e){
- //ignore, try next one
+ } catch (Exception e) {
+ // ignore, try next one
+ continue;
+ }
+ beanDescriptor = theBeanInfo.getBeanDescriptor();
+ if (beanDescriptor != null
+ && beanClass == beanDescriptor.getBeanClass()) {
+ return theBeanInfo;
}
}
- return theBeanInfo;
+ if (BeanInfo.class.isAssignableFrom(beanClass)) {
+ try {
+ return loadBeanInfo(beanClass.getName(), beanClass);
+ } catch (Exception e) {
+ // fall through
+ }
+ }
+ return null;
}
-
/*
* Method which attempts to instantiate a BeanInfo object of the supplied
* classname
Modified: harmony/enhanced/java/trunk/classlib/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/java/trunk/classlib/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java?rev=943853&r1=943852&r2=943853&view=diff
==============================================================================
--- harmony/enhanced/java/trunk/classlib/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java (original)
+++ harmony/enhanced/java/trunk/classlib/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java Thu May 13 09:19:48 2010
@@ -450,7 +450,60 @@ public class IntrospectorTest extends Te
} catch (IntrospectionException e) {
}
}
-
+
+ /*
+ * BeanClass provide bean info about itself
+ */
+ public static class MockBeanInfo4BeanClassSelf implements BeanInfo {
+
+ public void setValue(String v) throws Exception {
+ }
+
+ public int getValue() {
+ return 0;
+ }
+
+ public BeanDescriptor getBeanDescriptor() {
+ return null;
+ }
+
+ public EventSetDescriptor[] getEventSetDescriptors() {
+ return new EventSetDescriptor[0];
+ }
+
+ public int getDefaultEventIndex() {
+ return -1;
+ }
+
+ public int getDefaultPropertyIndex() {
+ return -1;
+ }
+
+ public PropertyDescriptor[] getPropertyDescriptors() {
+ return new PropertyDescriptor[0];
+ }
+
+ public MethodDescriptor[] getMethodDescriptors() {
+ return new MethodDescriptor[0];
+ }
+
+ public BeanInfo[] getAdditionalBeanInfo() {
+ return null;
+ }
+
+ public Image getIcon(int iconKind) {
+ return null;
+ }
+ }
+
+ public void test_BeanInfo_Self() throws Exception {
+ BeanInfo info = Introspector
+ .getBeanInfo(MockBeanInfo4BeanClassSelf.class);
+ assertEquals(0, info.getMethodDescriptors().length);
+ assertEquals(0, info.getPropertyDescriptors().length);
+ assertEquals(0, info.getEventSetDescriptors().length);
+ }
+
/*
* Introspect static methods
*/