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-19 17:19:05 +0300
committerjfrijters <jfrijters>2015-03-19 17:19:05 +0300
commitef6a8e0c6e0c8f044e6a130e55803fec6efaab13 (patch)
treee84f0ed45ecdac7f5ef38e5ad73e3df43cb797c2
parentc646b5def684d92d33f23e4f502fdf9cfd51870a (diff)
Bug fix. Make sure inner classes are loadable.
-rw-r--r--runtime/openjdk/java.lang.cs10
1 files changed, 7 insertions, 3 deletions
diff --git a/runtime/openjdk/java.lang.cs b/runtime/openjdk/java.lang.cs
index 8330d4e9..4cb85bed 100644
--- a/runtime/openjdk/java.lang.cs
+++ b/runtime/openjdk/java.lang.cs
@@ -328,11 +328,15 @@ static class Java_java_lang_Class
throw new IllegalAccessError(string.Format("tried to access class {0} from class {1}", decl.Name, wrapper.Name));
}
decl.Finish();
- if (Array.IndexOf(decl.InnerClasses, wrapper) == -1)
+ TypeWrapper[] declInner = decl.InnerClasses;
+ for (int i = 0; i < declInner.Length; i++)
{
- throw new IncompatibleClassChangeError(string.Format("{0} and {1} disagree on InnerClasses attribute", decl.Name, wrapper.Name));
+ if (declInner[i].Name == wrapper.Name && declInner[i].EnsureLoadable(decl.GetClassLoader()) == wrapper)
+ {
+ return decl.ClassObject;
+ }
}
- return decl.ClassObject;
+ throw new IncompatibleClassChangeError(string.Format("{0} and {1} disagree on InnerClasses attribute", decl.Name, wrapper.Name));
}
catch (RetargetableJavaException x)
{