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"));
}