Simplified class loading exception handling.

This commit is contained in:
jfrijters 2013-02-23 12:41:02 +00:00
Родитель 391d7dcef0
Коммит 005ef39c08
4 изменённых файлов: 37 добавлений и 40 удалений

Просмотреть файл

@ -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)
{

Просмотреть файл

@ -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
}

Просмотреть файл

@ -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)

Просмотреть файл

@ -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();