The bootstrap method gets called with three arguments jdk8
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 12 Aug 2014 20:51:09 +0200
branchjdk8
changeset 1669139267156f32
parent 1668 ec0ee77173e9
child 1670 b913b6b415a0
The bootstrap method gets called with three arguments
rt/emul/compact/src/main/java/java/lang/invoke/MethodHandleNatives.java
     1.1 --- a/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandleNatives.java	Tue Aug 12 20:15:50 2014 +0200
     1.2 +++ b/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandleNatives.java	Tue Aug 12 20:51:09 2014 +0200
     1.3 @@ -25,11 +25,13 @@
     1.4  
     1.5  package java.lang.invoke;
     1.6  
     1.7 -import java.lang.invoke.MethodHandles.Lookup;
     1.8 -import java.lang.reflect.Field;
     1.9  import static java.lang.invoke.MethodHandleNatives.Constants.*;
    1.10  import static java.lang.invoke.MethodHandleStatics.*;
    1.11 +import java.lang.invoke.MethodHandles.Lookup;
    1.12  import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP;
    1.13 +import java.lang.reflect.Constructor;
    1.14 +import java.lang.reflect.Field;
    1.15 +import java.lang.reflect.Method;
    1.16  
    1.17  /**
    1.18   * The JVM interface for the method handles package is all here.
    1.19 @@ -43,13 +45,41 @@
    1.20  
    1.21      /// MemberName support
    1.22  
    1.23 -    static native void init(MemberName self, Object ref);
    1.24 -    static native void expand(MemberName self);
    1.25 +    static void init(MemberName self, Object ref) {
    1.26 +    }
    1.27 +    
    1.28 +    static void expand(MemberName self) {
    1.29 +    }
    1.30 +    
    1.31      static MemberName resolve(MemberName self, Class<?> caller) throws LinkageError {
    1.32          return self;
    1.33      }
    1.34 -    static native int getMembers(Class<?> defc, String matchName, String matchSig,
    1.35 -            int matchFlags, Class<?> caller, int skip, MemberName[] results);
    1.36 +    static int getMembers(Class<?> defc, String matchName, String matchSig,
    1.37 +            int matchFlags, Class<?> caller, int skip, MemberName[] results) {
    1.38 +        int orig = skip;
    1.39 +        for (Method m : defc.getMethods()) {
    1.40 +            if (skip == results.length) {
    1.41 +                break;
    1.42 +            }
    1.43 +            MemberName mn = new MemberName(m);
    1.44 +            results[skip++] = mn;
    1.45 +        }
    1.46 +        for (Constructor m : defc.getConstructors()) {
    1.47 +            if (skip == results.length) {
    1.48 +                break;
    1.49 +            }
    1.50 +            MemberName mn = new MemberName(m);
    1.51 +            results[skip++] = mn;
    1.52 +        }
    1.53 +        for (Field m : defc.getFields()) {
    1.54 +            if (skip == results.length) {
    1.55 +                break;
    1.56 +            }
    1.57 +            MemberName mn = new MemberName(m);
    1.58 +            results[skip++] = mn;
    1.59 +        }
    1.60 +        return skip - orig;
    1.61 +    }
    1.62  
    1.63      /// Field layout queries parallel to sun.misc.Unsafe:
    1.64      static native long objectFieldOffset(MemberName self);  // e.g., returns vmindex