Add support for H_NEWINVOKESPECIAL
This commit is contained in:
@@ -188,6 +188,10 @@ public class Java8 {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Opcodes.H_NEWINVOKESPECIAL:
|
||||
Class<?> clazz = callerLoader.loadClass(owner.replace("/", "."));
|
||||
implMethod = caller.findConstructor(clazz, implMethodType);
|
||||
break;
|
||||
case Opcodes.H_INVOKEINTERFACE:
|
||||
Handle h = (Handle) bsmArgs[1];
|
||||
String interfaceOwner = h.getOwner();
|
||||
|
||||
@@ -425,6 +425,26 @@ public class Java8Tests extends SpringLoadedTests {
|
||||
// assertEquals("{15=test3}", r.returnValue);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lambdaWithDoubleDotConstructor() throws Exception {
|
||||
String t = "basic.LambdaO";
|
||||
TypeRegistry typeRegistry = getTypeRegistry(t);
|
||||
byte[] sc = loadBytesForClass(t);
|
||||
ReloadableType rtype = typeRegistry.addType(t, sc);
|
||||
|
||||
Class<?> simpleClass = rtype.getClazz();
|
||||
Result r = runUnguarded(simpleClass, "run");
|
||||
|
||||
r = runUnguarded(simpleClass, "run");
|
||||
assertEquals(3, r.returnValue);
|
||||
|
||||
byte[] renamed = retrieveRename(t, t + "2");
|
||||
rtype.loadNewVersion("002", renamed);
|
||||
r = runUnguarded(simpleClass, "run");
|
||||
assertEquals(4, r.returnValue);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void streamWithLambda() throws Exception {
|
||||
String t = "basic.StreamA";
|
||||
|
||||
20
testdata-java8/src/main/java/basic/LambdaO.java
Normal file
20
testdata-java8/src/main/java/basic/LambdaO.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package basic;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class LambdaO {
|
||||
|
||||
public static void main(String[] args) {
|
||||
run();
|
||||
}
|
||||
|
||||
public static int run() {
|
||||
List<Integer> integers = Arrays.asList(1, 2, 3);
|
||||
List<Integer> collected = integers.stream().collect(Collectors.toCollection(ArrayList::new));
|
||||
return collected.size();
|
||||
}
|
||||
|
||||
}
|
||||
21
testdata-java8/src/main/java/basic/LambdaO2.java
Normal file
21
testdata-java8/src/main/java/basic/LambdaO2.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package basic;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class LambdaO2 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
run();
|
||||
}
|
||||
|
||||
public static int run() {
|
||||
|
||||
List<Integer> integers = Arrays.asList(1, 2, 3, 4);
|
||||
List<Integer> collected = integers.stream().collect(Collectors.toCollection(ArrayList::new));
|
||||
return collected.size();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user