diff options
author | jfrijters <jfrijters> | 2015-03-19 17:19:05 +0300 |
---|---|---|
committer | jfrijters <jfrijters> | 2015-03-19 17:19:05 +0300 |
commit | ef6a8e0c6e0c8f044e6a130e55803fec6efaab13 (patch) | |
tree | e84f0ed45ecdac7f5ef38e5ad73e3df43cb797c2 | |
parent | c646b5def684d92d33f23e4f502fdf9cfd51870a (diff) |
Bug fix. Make sure inner classes are loadable.
-rw-r--r-- | runtime/openjdk/java.lang.cs | 10 |
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) { |