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>2013-02-23 16:41:02 +0400
committerjfrijters <jfrijters>2013-02-23 16:41:02 +0400
commit005ef39c086b78e4510d37a3cbeacfe881509003 (patch)
treecc42060f481deecf8b245afafb28bcf6608bd3dc
parent391d7dcef01367379560eb772a6b56a645e6fbc1 (diff)
Simplified class loading exception handling.
-rw-r--r--runtime/ByteCodeHelper.cs33
-rw-r--r--runtime/JavaException.cs8
-rw-r--r--runtime/common.cs28
-rw-r--r--runtime/openjdk.cs8
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();