diff options
author | jfrijters <jfrijters> | 2015-03-22 10:21:06 +0300 |
---|---|---|
committer | jfrijters <jfrijters> | 2015-03-22 10:21:06 +0300 |
commit | 38ddffa218aac3fd61e75842ab621d4d68fae84f (patch) | |
tree | e92fdae3d9876680fb59377666733f6a2f7507af | |
parent | 04a5dd7a316606769f44af6933604939e51811b1 (diff) |
Added a hack to the deprecated Reflection.getCallerClass(int) version to skip LamdbaForm methods to report the right caller when dynamic binding is used.
-rw-r--r-- | runtime/openjdk/sun.reflect.cs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/runtime/openjdk/sun.reflect.cs b/runtime/openjdk/sun.reflect.cs index fda18623..b6a1fffa 100644 --- a/runtime/openjdk/sun.reflect.cs +++ b/runtime/openjdk/sun.reflect.cs @@ -140,14 +140,11 @@ static class Java_sun_reflect_Reflection #if FIRST_PASS return null; #else - int i = 3; - if (realFramesToSkip <= 1) + if (realFramesToSkip <= 0) { - i = 1; - realFramesToSkip = Math.Max(realFramesToSkip + 2, 2); + return ikvm.@internal.ClassLiteral<sun.reflect.Reflection>.Value; } - realFramesToSkip--; - for (; ; ) + for (int i = 2; ; ) { MethodBase method = new StackFrame(i++, false).GetMethod(); if (method == null) @@ -158,6 +155,12 @@ static class Java_sun_reflect_Reflection { continue; } + // HACK we skip HideFromJavaFlags.StackTrace too because we want to skip the LambdaForm methods + // that are used by late binding + if ((GetHideFromJavaFlags(method) & HideFromJavaFlags.StackTrace) != 0) + { + continue; + } if (--realFramesToSkip == 0) { return ClassLoaderWrapper.GetWrapperFromType(method.DeclaringType).ClassObject; |