Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2015-03-22 10:21:06 +0300
committerjfrijters <jfrijters>2015-03-22 10:21:06 +0300
commit38ddffa218aac3fd61e75842ab621d4d68fae84f (patch)
treee92fdae3d9876680fb59377666733f6a2f7507af
parent04a5dd7a316606769f44af6933604939e51811b1 (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.cs15
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;