From 8f299288dd118d132b70c3886b721998ce8f23d4 Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Sun, 15 Mar 2015 19:57:01 -0700 Subject: [PATCH] pick the first public candidate --- .../org/springsource/loaded/TypeRegistry.java | 17 +++++++++++++---- .../springsource/loaded/test/Java8Tests.java | 4 ---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java b/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java index e522cd8..c0c2fed 100644 --- a/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java +++ b/springloaded/src/main/java/org/springsource/loaded/TypeRegistry.java @@ -26,6 +26,7 @@ import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.net.URL; import java.security.ProtectionDomain; import java.util.ArrayList; @@ -1302,11 +1303,19 @@ public class TypeRegistry { Class clazz= instance.getClass(); try { if (clazz.getName().contains("$$Lambda")) { - // There will only be one method, the SAM method + // There may be multiple methods here, we want the public one (I think!) Method[] ms = instance.getClass().getDeclaredMethods(); - Method m = ms[0]; - m.setAccessible(true); - Object o = m.invoke(instance, params); + // public java.lang.String basic.LambdaJ$$E002$$Lambda$2/1484594489.m(java.lang.String,java.lang.String) + // private static basic.LambdaJ$Foo basic.LambdaJ$$E002$$Lambda$2/1484594489.get$Lambda(basic.LambdaJ) + Method toUse = null; + for (Method m: ms) { + if (Modifier.isPublic(m.getModifiers())) { + toUse = m; + break; + } + } + toUse.setAccessible(true); + Object o = toUse.invoke(instance, params); return o; } else { diff --git a/springloaded/src/test/java/org/springsource/loaded/test/Java8Tests.java b/springloaded/src/test/java/org/springsource/loaded/test/Java8Tests.java index 02f7c1d..913df2e 100644 --- a/springloaded/src/test/java/org/springsource/loaded/test/Java8Tests.java +++ b/springloaded/src/test/java/org/springsource/loaded/test/Java8Tests.java @@ -22,7 +22,6 @@ import org.junit.Ignore; import org.junit.Test; import org.springsource.loaded.ReloadableType; import org.springsource.loaded.TypeRegistry; -import org.springsource.loaded.test.infra.ClassPrinter; import org.springsource.loaded.test.infra.Result; /** @@ -363,9 +362,6 @@ public class Java8Tests extends SpringLoadedTests { r = runUnguarded(simpleClass, "run"); assertEquals(4, r.returnValue); } - - - @Ignore @Test