You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2008/08/31 19:15:48 UTC

svn commit: r690733 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src: main/java/org/apache/ibatis/reflection/ test/java/domain/misc/generics/ test/java/org/apache/ibatis/reflection/

Author: cbegin
Date: Sun Aug 31 10:15:47 2008
New Revision: 690733

URL: http://svn.apache.org/viewvc?rev=690733&view=rev
Log:
fixed generic bridge methods

Added:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericAbstract.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericConcrete.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericInterface.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericSubclass.java
Modified:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/Reflector.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/reflection/MetaClassTest.java

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/Reflector.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/Reflector.java?rev=690733&r1=690732&r2=690733&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/Reflector.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/Reflector.java Sun Aug 31 10:15:47 2008
@@ -59,7 +59,7 @@
   }
 
   private void addGetMethods(Class cls) {
-    Method[] methods = getAllMethodsForClass(cls);
+    Method[] methods = getClassMethods(cls);
     for (Method method : methods) {
       String name = method.getName();
       if (name.startsWith("get") && name.length() > 3) {
@@ -85,7 +85,7 @@
 
   private void addSetMethods(Class cls) {
     Map<String, List<Method>> conflictingSetters = new HashMap<String, List<Method>>();
-    Method[] methods = getAllMethodsForClass(cls);
+    Method[] methods = getClassMethods(cls);
     for (Method method : methods) {
       String name = method.getName();
       if (name.startsWith("set") && name.length() > 3) {
@@ -192,19 +192,6 @@
     return !(name.startsWith("$") || "serialVersionUID".equals(name) || "class".equals(name));
   }
 
-  private Method[] getAllMethodsForClass(Class cls) {
-    if (cls.isInterface()) {
-      // interfaces only have public methods - so the
-      // simple call is all we need (this will also get superinterface methods)
-      return cls.getMethods();
-    } else {
-      // need to get all the declared methods in this class
-      // and any super-class - then need to set access appropriatly
-      // for private methods
-      return getClassMethods(cls);
-    }
-  }
-
   /**
    * This method returns an array containing all methods
    * declared in this class and any superclass.
@@ -237,20 +224,22 @@
 
   private void addUniqueMethods(HashMap<String, Method> uniqueMethods, Method[] methods) {
     for (Method currentMethod : methods) {
-      String signature = getSignature(currentMethod);
-      // check to see if the method is already known
-      // if it is known, then an extended class must have
-      // overridden a method
-      if (!uniqueMethods.containsKey(signature)) {
-        if (canAccessPrivateMethods()) {
-          try {
-            currentMethod.setAccessible(true);
-          } catch (Exception e) {
-            // Ignored. This is only a final precaution, nothing we can do.
+      if (!currentMethod.isBridge()) {
+        String signature = getSignature(currentMethod);
+        // check to see if the method is already known
+        // if it is known, then an extended class must have
+        // overridden a method
+        if (!uniqueMethods.containsKey(signature)) {
+          if (canAccessPrivateMethods()) {
+            try {
+              currentMethod.setAccessible(true);
+            } catch (Exception e) {
+              // Ignored. This is only a final precaution, nothing we can do.
+            }
           }
-        }
 
-        uniqueMethods.put(signature, currentMethod);
+          uniqueMethods.put(signature, currentMethod);
+        }
       }
     }
   }
@@ -259,7 +248,6 @@
     StringBuffer sb = new StringBuffer();
     sb.append(method.getName());
     Class[] parameters = method.getParameterTypes();
-
     for (int i = 0; i < parameters.length; i++) {
       if (i == 0) {
         sb.append(':');
@@ -268,7 +256,6 @@
       }
       sb.append(parameters[i].getName());
     }
-
     return sb.toString();
   }
 

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericAbstract.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericAbstract.java?rev=690733&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericAbstract.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericAbstract.java Sun Aug 31 10:15:47 2008
@@ -0,0 +1,6 @@
+package domain.misc.generics;
+
+public abstract class GenericAbstract<K> {
+  public abstract K getId();
+}
+

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericConcrete.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericConcrete.java?rev=690733&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericConcrete.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericConcrete.java Sun Aug 31 10:15:47 2008
@@ -0,0 +1,21 @@
+package domain.misc.generics;
+
+public class GenericConcrete extends GenericSubclass implements GenericInterface<Long> {
+  private Long id;
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = Long.valueOf(id);
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public void setId(Integer id) {
+    this.id = (long)id;
+  }
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericInterface.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericInterface.java?rev=690733&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericInterface.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericInterface.java Sun Aug 31 10:15:47 2008
@@ -0,0 +1,5 @@
+package domain.misc.generics;
+
+public interface GenericInterface<K> {
+  void setId(K id);
+}

Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericSubclass.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericSubclass.java?rev=690733&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericSubclass.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/misc/generics/GenericSubclass.java Sun Aug 31 10:15:47 2008
@@ -0,0 +1,9 @@
+package domain.misc.generics;
+
+public abstract class GenericSubclass extends GenericAbstract<Long> {
+  public abstract Long getId();
+}
+
+
+
+

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/reflection/MetaClassTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/reflection/MetaClassTest.java?rev=690733&r1=690732&r2=690733&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/reflection/MetaClassTest.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/reflection/MetaClassTest.java Sun Aug 31 10:15:47 2008
@@ -1,6 +1,7 @@
 package org.apache.ibatis.reflection;
 
 import domain.misc.RichType;
+import domain.misc.generics.GenericConcrete;
 import org.junit.*;
 
 import java.util.*;
@@ -14,14 +15,20 @@
     }
   };
 
-  private MetaClass meta = MetaClass.forClass(RichType.class);
-
   public MetaClassTest() {
     rich.setRichType(new RichType());
   }
 
   @Test
+  public void shouldTestDataTypeOfGenericMethod() {
+    MetaClass meta = MetaClass.forClass(GenericConcrete.class);
+    Assert.assertEquals(Long.class, meta.getGetterType("id"));
+    Assert.assertEquals(Long.class, meta.getSetterType("id"));
+  }
+
+  @Test
   public void shouldCheckGetterExistance() {
+    MetaClass meta = MetaClass.forClass(RichType.class);
     Assert.assertTrue(meta.hasGetter("richField"));
     Assert.assertTrue(meta.hasGetter("richProperty"));
     Assert.assertTrue(meta.hasGetter("richList"));
@@ -40,6 +47,7 @@
 
   @Test
   public void shouldCheckSetterExistance() {
+    MetaClass meta = MetaClass.forClass(RichType.class);
     Assert.assertTrue(meta.hasSetter("richField"));
     Assert.assertTrue(meta.hasSetter("richProperty"));
     Assert.assertTrue(meta.hasSetter("richList"));
@@ -58,6 +66,7 @@
 
   @Test
   public void shouldCheckTypeForEachGetter() {
+    MetaClass meta = MetaClass.forClass(RichType.class);
     Assert.assertEquals(String.class, meta.getGetterType("richField"));
     Assert.assertEquals(String.class, meta.getGetterType("richProperty"));
     Assert.assertEquals(List.class, meta.getGetterType("richList"));
@@ -74,6 +83,7 @@
 
   @Test
   public void shouldCheckTypeForEachSetter() {
+    MetaClass meta = MetaClass.forClass(RichType.class);
     Assert.assertEquals(String.class, meta.getSetterType("richField"));
     Assert.assertEquals(String.class, meta.getSetterType("richProperty"));
     Assert.assertEquals(List.class, meta.getSetterType("richList"));
@@ -90,12 +100,14 @@
 
   @Test
   public void shouldCheckGetterAndSetterNames() {
+    MetaClass meta = MetaClass.forClass(RichType.class);
     Assert.assertEquals(5, meta.getGetterNames().length);
     Assert.assertEquals(5, meta.getSetterNames().length);
   }
 
   @Test
   public void shouldFindPropertyName() {
+    MetaClass meta = MetaClass.forClass(RichType.class);
     Assert.assertEquals("richField", meta.findProperty("RICHfield"));
   }