Fix broken logic that uses null owner class
Fixes https://github.com/spring-projects/spring-loaded/issues/173 Fixes https://github.com/spring-projects/spring-loaded/issues/187 Fixes https://github.com/spring-projects/spring-loaded/issues/175§
This commit is contained in:
@@ -150,8 +150,8 @@ public class Java8 {
|
||||
if (null == ownerRType || !ownerRType.hasBeenReloaded()) {
|
||||
// target containing the reference/lambdaMethod has not been reloaded, no need to get over
|
||||
// complicated.
|
||||
Class<?> ownerClazz = ownerRType.getClazz();
|
||||
implMethod = caller.findVirtual(ownerClazz, name, implMethodType);
|
||||
Class<?> clazz = callerLoader.loadClass(owner.replace("/", "."));
|
||||
implMethod = caller.findVirtual(clazz, name, implMethodType);
|
||||
}
|
||||
else {
|
||||
MethodMember targetReferenceMethodMember = ownerRType.getCurrentMethod(name, descriptor);
|
||||
|
||||
@@ -68,6 +68,26 @@ public class Java8Tests extends SpringLoadedTests {
|
||||
// TODO should assert something but the issue is that the JVM crashes...
|
||||
}
|
||||
|
||||
@Test
|
||||
public void issue173() throws Exception {
|
||||
String t = "bugs.Issue173";
|
||||
TypeRegistry typeRegistry = getTypeRegistry(t);
|
||||
byte[] sc = loadBytesForClass(t);
|
||||
ReloadableType rtype = typeRegistry.addType(t, sc);
|
||||
|
||||
Class<?> clazz = rtype.getClazz();
|
||||
@SuppressWarnings("unused")
|
||||
Result r = runUnguarded(clazz, "run");
|
||||
|
||||
r = runUnguarded(clazz, "run");
|
||||
|
||||
rtype.loadNewVersion("002", rtype.bytesInitial);
|
||||
|
||||
r = runUnguarded(clazz, "run");
|
||||
|
||||
assertEquals("https://www.redacted.com/path", r.returnValue);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void callBasicType() throws Exception {
|
||||
String t = "basic.FirstClass";
|
||||
|
||||
Reference in New Issue
Block a user