You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2008/09/08 12:41:08 UTC

svn commit: r693047 - in /harmony/enhanced/classlib/trunk/modules/beans/src: main/java/java/beans/StandardBeanInfo.java test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java

Author: tellison
Date: Mon Sep  8 03:41:06 2008
New Revision: 693047

URL: http://svn.apache.org/viewvc?rev=693047&view=rev
Log:
Apply patch HARMONY-5973 ([classlib] [beans] StandardBeanInfo fails to gain correct indexed read and write methods of a indexed property)

Modified:
    harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/StandardBeanInfo.java
    harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java

Modified: harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/StandardBeanInfo.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/StandardBeanInfo.java?rev=693047&r1=693046&r2=693047&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/StandardBeanInfo.java (original)
+++ harmony/enhanced/classlib/trunk/modules/beans/src/main/java/java/beans/StandardBeanInfo.java Mon Sep  8 03:41:06 2008
@@ -968,16 +968,11 @@
             // Both normal getter and setter of the same type were defined;
             // no indexed getter/setter *PAIR* of the other type defined
             if (normalGetter != null && normalSetter != null &&
-                    (indexedGetter == null || indexedSetter == null) &&
-                    normalPropType != indexedPropType) {
-//                String tag = normalPropType.isArray() ?
-//                        STR_INDEXED : STR_NORMAL;
-                String tag = STR_NORMAL;
-
-                table.put(tag, STR_VALID);
-                table.put(tag + PREFIX_GET, normalGetter);
-                table.put(tag + PREFIX_SET, normalSetter);
-                table.put(tag + STR_PROPERTY_TYPE, normalPropType);
+                    (indexedGetter == null || indexedSetter == null)) {
+                table.put(STR_NORMAL, STR_VALID);
+                table.put(STR_NORMAL + PREFIX_GET, normalGetter);
+                table.put(STR_NORMAL + PREFIX_SET, normalSetter);
+                table.put(STR_NORMAL + STR_PROPERTY_TYPE, normalPropType);
                 continue;
             }
 
@@ -986,14 +981,10 @@
             // getters & setters defined
             if ((normalGetter != null || normalSetter != null) &&
                     indexedGetter == null && indexedSetter == null) {
-//                String tag = normalPropType.isArray() ?
-//                        STR_INDEXED : STR_NORMAL;
-                String tag = STR_NORMAL;
-
-                table.put(tag, STR_VALID);
-                table.put(tag + PREFIX_GET, normalGetter);
-                table.put(tag + PREFIX_SET, normalSetter);
-                table.put(tag + STR_PROPERTY_TYPE, normalPropType);
+                table.put(STR_NORMAL, STR_VALID);
+                table.put(STR_NORMAL + PREFIX_GET, normalGetter);
+                table.put(STR_NORMAL + PREFIX_SET, normalSetter);
+                table.put(STR_NORMAL + STR_PROPERTY_TYPE, normalPropType);
                 continue;
             }
 
@@ -1030,6 +1021,18 @@
                         indexedPropType);
                 continue;
             }
+            
+            // RULE5
+            // Both indexed getter and setter methods are defined
+            // no normal getter/setter *PAIR* of the other type defined
+            if ((normalSetter != null || normalGetter != null)
+                    && indexedGetter != null && indexedSetter != null) {
+                table.put(STR_INDEXED, STR_VALID);
+                table.put(STR_INDEXED + PREFIX_GET, indexedGetter);
+                table.put(STR_INDEXED + PREFIX_SET, indexedSetter);
+                table.put(STR_INDEXED + STR_PROPERTY_TYPE, indexedPropType);
+                continue;
+            }
 
             // default rule - invalid property
             table.put(STR_NORMAL, STR_INVALID);

Modified: harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java?rev=693047&r1=693046&r2=693047&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/beans/src/test/java/org/apache/harmony/beans/tests/java/beans/IntrospectorTest.java Mon Sep  8 03:41:06 2008
@@ -471,6 +471,138 @@
         assertTrue(contains("getStaticName", methodDescriptors));
         assertTrue(contains("setStaticName", methodDescriptors));
     }
+    
+    public void testMockIncompatibleGetterAndIndexedGetterBean() throws Exception {
+        Class beanClass = MockIncompatibleGetterAndIndexedGetterBean.class;
+        BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+        PropertyDescriptor pd = null;
+        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
+        for (int i = 0; i < pds.length; i++) {
+            pd = pds[i];
+            if (pd.getName().equals("data")) {
+                break;
+            }
+        }
+        assertNotNull(pd);
+        assertTrue(pd instanceof IndexedPropertyDescriptor);
+        IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
+        assertNull(ipd.getReadMethod());
+        assertNull(ipd.getWriteMethod());
+        Method indexedReadMethod = beanClass.getMethod("getData",
+                new Class[] { int.class });
+        Method indexedWriteMethod = beanClass.getMethod("setData", new Class[] {
+                int.class, int.class });
+        assertEquals(indexedReadMethod, ipd.getIndexedReadMethod());
+        assertEquals(indexedWriteMethod, ipd.getIndexedWriteMethod());
+    }
+    
+    public void testMockIncompatibleSetterAndIndexedSetterBean() throws Exception {
+        Class beanClass = MockIncompatibleSetterAndIndexedSetterBean.class;
+        BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+        PropertyDescriptor pd = null;
+        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
+        for (int i = 0; i < pds.length; i++) {
+            pd = pds[i];
+            if (pd.getName().equals("data")) {
+                break;
+            }
+        }
+        assertNotNull(pd);
+        assertTrue(pd instanceof IndexedPropertyDescriptor);
+        IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
+        assertNull(ipd.getReadMethod());
+        assertNull(ipd.getWriteMethod());
+        Method indexedReadMethod = beanClass.getMethod("getData",
+                new Class[] { int.class });
+        Method indexedWriteMethod = beanClass.getMethod("setData", new Class[] {
+                int.class, int.class });
+        assertEquals(indexedReadMethod, ipd.getIndexedReadMethod());
+        assertEquals(indexedWriteMethod, ipd.getIndexedWriteMethod());
+    }
+    
+    public void testMockIncompatibleAllSetterAndGetterBean() throws Exception {
+        Class beanClass = MockIncompatibleAllSetterAndGetterBean.class;
+        BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+        PropertyDescriptor pd = null;
+        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
+        for (int i = 0; i < pds.length; i++) {
+            pd = pds[i];
+            if (pd.getName().equals("data")) {
+                break;
+            }
+        }
+        assertNotNull(pd);
+        assertTrue(pd instanceof IndexedPropertyDescriptor);
+        IndexedPropertyDescriptor ipd = (IndexedPropertyDescriptor) pd;
+        assertNull(ipd.getReadMethod());
+        assertNull(ipd.getWriteMethod());
+        Method indexedReadMethod = beanClass.getMethod("getData",
+                new Class[] { int.class });
+        Method indexedWriteMethod = beanClass.getMethod("setData", new Class[] {
+                int.class, int.class });
+        assertEquals(indexedReadMethod, ipd.getIndexedReadMethod());
+        assertEquals(indexedWriteMethod, ipd.getIndexedWriteMethod());
+    }
+    
+    public class MockIncompatibleGetterAndIndexedGetterBean {
+        private int[] datas;
+
+        public int getData() {
+            return datas[0];
+        }
+
+        public int getData(int index) {
+            return datas[index];
+        }
+
+        public void setData(int index, int data) {
+            this.datas[index] = data;
+        }
+    }
+    
+    public class MockIncompatibleSetterAndIndexedSetterBean {
+        
+        private int[] datas;
+        
+        public int getData(int index){
+            return datas[index];
+        }
+        
+        public void setData(int index, int data) {
+            this.datas[index] = data;
+        }
+        
+        public void setData(int data){
+            this.datas[0] = data;
+        }
+        
+    }
+    
+    public class MockIncompatibleAllSetterAndGetterBean {
+        
+        private int[] datas;
+        
+        public int getData(){
+            return datas[0];
+        }
+        
+        public int getData(int index){
+            return datas[index];
+        }
+        
+        public void setData(int index, int data) {
+            this.datas[index] = data;
+        }
+        
+        public void setData(int data){
+            this.datas[0] = data;
+        }
+        
+        public void setData(){
+            this.datas[0] = 0;
+        }
+        
+    }
 
     public static class StaticClazz {