Skip to content

Commit

Permalink
Merge pull request #57 from harawata/getReadMethod-default-method
Browse files Browse the repository at this point in the history
getReadMethod() should check default methods as well.
  • Loading branch information
lukaszlenart authored Oct 4, 2018
2 parents 8510935 + e3d06bc commit 5f78eff
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/java/ognl/OgnlRuntime.java
Original file line number Diff line number Diff line change
Expand Up @@ -1795,7 +1795,7 @@ public static Map getMethods(Class targetClass, boolean staticMethods)
}
}
return result;
}
}

private static void collectMethods(Class c, Map result, boolean staticMethods) {
Method[] ma = c.getDeclaredMethods();
Expand Down Expand Up @@ -2947,15 +2947,14 @@ public static Method getReadMethod(Class target, String name, Class[] argClasses

name = name.toLowerCase();

BeanInfo info = Introspector.getBeanInfo(target);
MethodDescriptor[] methods = info.getMethodDescriptors();
Method[] methods = target.getMethods();

// exact matches first
ArrayList<Method> candidates = new ArrayList<Method>();

for (int i = 0; i < methods.length; i++)
{
if (!isMethodCallable(methods[i].getMethod()))
if (!isMethodCallable(methods[i]))
continue;

if ((methods[i].getName().equalsIgnoreCase(name)
Expand All @@ -2964,7 +2963,7 @@ public static Method getReadMethod(Class target, String name, Class[] argClasses
|| methods[i].getName().toLowerCase().equals("is" + name))
&& !methods[i].getName().startsWith("set"))
{
candidates.add(methods[i].getMethod());
candidates.add(methods[i]);
}
}
if (!candidates.isEmpty()) {
Expand All @@ -2975,17 +2974,17 @@ public static Method getReadMethod(Class target, String name, Class[] argClasses

for (int i = 0; i < methods.length; i++)
{
if (!isMethodCallable(methods[i].getMethod()))
if (!isMethodCallable(methods[i]))
continue;

if (methods[i].getName().equalsIgnoreCase(name)
&& !methods[i].getName().startsWith("set")
&& !methods[i].getName().startsWith("get")
&& !methods[i].getName().startsWith("is")
&& !methods[i].getName().startsWith("has")
&& methods[i].getMethod().getReturnType() != Void.TYPE) {
&& methods[i].getReturnType() != Void.TYPE) {

Method m = methods[i].getMethod();
Method m = methods[i];
if (!candidates.contains(m))
candidates.add(m);
}
Expand Down
5 changes: 5 additions & 0 deletions src/test/java/ognl/Java8Test.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ognl;

import java.lang.reflect.Method;
import java.util.List;

import junit.framework.TestCase;
Expand All @@ -10,12 +11,16 @@ public void testDefaultMethodOnClass() {
/* defaultMethod(); */
List defaultMethod = OgnlRuntime.getMethods(ClassWithDefaults.class, "defaultMethod", false);
assertNotNull(defaultMethod);
Method method = OgnlRuntime.getReadMethod(ClassWithDefaults.class, "defaultMethod");
assertNotNull(method);
}

public void testDefaultMethodOnSubClass() {
/* defaultMethod(); */
List defaultMethod = OgnlRuntime.getMethods(SubClassWithDefaults.class, "defaultMethod", false);
assertNotNull(defaultMethod);
Method method = OgnlRuntime.getReadMethod(SubClassWithDefaults.class, "defaultMethod");
assertNotNull(method);
}

public void testGetDeclaredMethods() {
Expand Down

0 comments on commit 5f78eff

Please sign in to comment.