diff options
author | jfrijters <jfrijters> | 2013-02-23 16:41:02 +0400 |
---|---|---|
committer | jfrijters <jfrijters> | 2013-02-23 16:41:02 +0400 |
commit | 005ef39c086b78e4510d37a3cbeacfe881509003 (patch) | |
tree | cc42060f481deecf8b245afafb28bcf6608bd3dc | |
parent | 391d7dcef01367379560eb772a6b56a645e6fbc1 (diff) |
Simplified class loading exception handling.
-rw-r--r-- | runtime/ByteCodeHelper.cs | 33 | ||||
-rw-r--r-- | runtime/JavaException.cs | 8 | ||||
-rw-r--r-- | runtime/common.cs | 28 | ||||
-rw-r--r-- | runtime/openjdk.cs | 8 |
4 files changed, 37 insertions, 40 deletions
diff --git a/runtime/ByteCodeHelper.cs b/runtime/ByteCodeHelper.cs index dde7cd9c..c6f50770 100644 --- a/runtime/ByteCodeHelper.cs +++ b/runtime/ByteCodeHelper.cs @@ -301,18 +301,9 @@ namespace IKVM.Runtime wrapper.Finish(); return wrapper; } - catch(ClassNotFoundException x) - { - throw new java.lang.NoClassDefFoundError(x.Message); - } catch(RetargetableJavaException x) { - Exception javaException = x.ToJava(); - if(!(javaException is java.lang.Error)) - { - throw new java.lang.NoClassDefFoundError(javaException.Message).initCause(javaException); - } - throw javaException; + throw x.ToJava(); } #endif } @@ -492,18 +483,9 @@ namespace IKVM.Runtime } Interlocked.CompareExchange(ref cache, java.lang.invoke.MethodType.methodType(loader.RetTypeWrapperFromSig(sig).ClassObject, ptypes), null); } - catch (ClassNotFoundException x) - { - throw new java.lang.NoClassDefFoundError(x.Message); - } catch (RetargetableJavaException x) { - Exception javaException = x.ToJava(); - if (!(javaException is java.lang.Error)) - { - throw new java.lang.NoClassDefFoundError(javaException.Message).initCause(javaException); - } - throw javaException; + throw x.ToJava(); } #endif } @@ -572,18 +554,9 @@ namespace IKVM.Runtime } } } - catch (ClassNotFoundException x) - { - throw new java.lang.NoClassDefFoundError(x.Message); - } catch (RetargetableJavaException x) { - Exception javaException = x.ToJava(); - if (!(javaException is java.lang.Error)) - { - throw new java.lang.NoClassDefFoundError(javaException.Message).initCause(javaException); - } - throw javaException; + throw x.ToJava(); } catch (java.lang.ReflectiveOperationException x) { diff --git a/runtime/JavaException.cs b/runtime/JavaException.cs index c093c390..e41fad72 100644 --- a/runtime/JavaException.cs +++ b/runtime/JavaException.cs @@ -65,9 +65,13 @@ sealed class ClassLoadingException : RetargetableJavaException { } -#if !STATIC_COMPILER && !STUB_GENERATOR +#if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR internal override Exception ToJava() { + if (!(InnerException is java.lang.Error) && !(InnerException is java.lang.RuntimeException)) + { + return new java.lang.NoClassDefFoundError(InnerException.Message).initCause(InnerException); + } return InnerException; } #endif @@ -122,7 +126,7 @@ sealed class ClassNotFoundException : RetargetableJavaException #if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR internal override Exception ToJava() { - return new java.lang.ClassNotFoundException(Message); + return new java.lang.NoClassDefFoundError(Message); } #endif } diff --git a/runtime/common.cs b/runtime/common.cs index e881b403..75f39be6 100644 --- a/runtime/common.cs +++ b/runtime/common.cs @@ -215,28 +215,40 @@ namespace IKVM.NativeCode.ikvm.runtime public static global::java.lang.Class loadClass(global::java.lang.ClassLoader _this, string name, bool resolve) { -#if !FIRST_PASS - if (!global::java.lang.ClassLoader.checkName(name)) - { - throw new global::java.lang.ClassNotFoundException(name); - } -#endif +#if FIRST_PASS + return null; +#else try { + if (!global::java.lang.ClassLoader.checkName(name)) + { + throw new ClassNotFoundException(name); + } AssemblyClassLoader_ wrapper = (AssemblyClassLoader_)ClassLoaderWrapper.GetClassLoaderWrapper(_this); TypeWrapper tw = wrapper.LoadClass(name); - if(tw == null) + if (tw == null) { throw new ClassNotFoundException(name); } Tracer.Info(Tracer.ClassLoading, "Loaded class \"{0}\" from {1}", name, _this); return tw.ClassObject; } - catch(RetargetableJavaException x) + catch (ClassNotFoundException x) + { + Tracer.Info(Tracer.ClassLoading, "Failed to load class \"{0}\" from {1}", name, _this); + throw new global::java.lang.ClassNotFoundException(x.Message); + } + catch (ClassLoadingException x) + { + Tracer.Info(Tracer.ClassLoading, "Failed to load class \"{0}\" from {1}", name, _this); + throw x.InnerException; + } + catch (RetargetableJavaException x) { Tracer.Info(Tracer.ClassLoading, "Failed to load class \"{0}\" from {1}", name, _this); throw x.ToJava(); } +#endif } public static global::java.net.URL getResource(global::java.lang.ClassLoader _this, string name) diff --git a/runtime/openjdk.cs b/runtime/openjdk.cs index 6f323033..c0641089 100644 --- a/runtime/openjdk.cs +++ b/runtime/openjdk.cs @@ -2427,6 +2427,14 @@ namespace IKVM.NativeCode.java ClassLoaderWrapper classLoaderWrapper = ClassLoaderWrapper.GetClassLoaderWrapper(loader); tw = classLoaderWrapper.LoadClassByDottedName(name); } + catch (ClassNotFoundException x) + { + throw new global::java.lang.ClassNotFoundException(x.Message); + } + catch (ClassLoadingException x) + { + throw x.InnerException; + } catch (RetargetableJavaException x) { throw x.ToJava(); |