1.1 --- a/rt/emul/compact/src/main/java/java/lang/invoke/MethodHandleNatives.java Mon Aug 11 17:52:23 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