mirror of
https://github.com/corda/corda.git
synced 2025-06-14 13:18:18 +00:00
implement basic Java 8 lambda support
The two big pieces here are basic invokedynamic support and a working version of LambdaMetaFactory.metafactory. The latter works by dynamically building a synthetic class with three methods: a static factory method, a constructor for the factory method to call, and a method to satisfy the requested interface which defers to the specified MethodHandle. This work relies heavily on Avian's specific MethodType and MethodHandle implementations, which provide extra, non-standard features to make code generation easier. That means we'll probably need to use Avian's versions of java.lang.invoke.* even when building with the OpenJDK or Android class libraries.
This commit is contained in:
@ -1,3 +1,23 @@
|
||||
package java.lang.invoke;
|
||||
public abstract class MethodHandle {
|
||||
|
||||
public class MethodHandle {
|
||||
private final ClassLoader loader;
|
||||
final avian.VMMethod method;
|
||||
private volatile MethodType type;
|
||||
|
||||
MethodHandle(ClassLoader loader, avian.VMMethod method) {
|
||||
this.loader = loader;
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return new java.lang.reflect.Method(method).toString();
|
||||
}
|
||||
|
||||
public MethodType type() {
|
||||
if (type == null) {
|
||||
type = new MethodType(loader, method.spec);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user