зеркало из https://github.com/mono/ikvm-fork.git
Simplified class loading exception handling.
This commit is contained in:
Родитель
391d7dcef0
Коммит
005ef39c08
|
@ -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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче