Fix for #2829717. Constructing java.lang.String instances should redirect to static helper method.

This commit is contained in:
jfrijters 2009-07-30 16:34:30 +00:00
Родитель 8a9fc7420b
Коммит cb136e677f
1 изменённых файлов: 12 добавлений и 2 удалений

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

@ -1616,10 +1616,14 @@ namespace IKVM.Runtime
} }
internal static jobject AllocObject(JNIEnv* pEnv, jclass clazz) internal static jobject AllocObject(JNIEnv* pEnv, jclass clazz)
{
return AllocObjectImpl(pEnv, TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)));
}
private static jobject AllocObjectImpl(JNIEnv* pEnv, TypeWrapper wrapper)
{ {
try try
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz));
if(wrapper.IsAbstract) if(wrapper.IsAbstract)
{ {
SetPendingException(pEnv, new java.lang.InstantiationException(wrapper.Name)); SetPendingException(pEnv, new java.lang.InstantiationException(wrapper.Name));
@ -1724,7 +1728,13 @@ namespace IKVM.Runtime
internal static jobject NewObjectA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) internal static jobject NewObjectA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args)
{ {
jobject obj = AllocObject(pEnv, clazz); TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz));
if(!wrapper.IsAbstract && wrapper.TypeAsBaseType.IsAbstract)
{
// static newinstance helper method
return pEnv->MakeLocalRef(InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false));
}
jobject obj = AllocObjectImpl(pEnv, wrapper);
if(obj != IntPtr.Zero) if(obj != IntPtr.Zero)
{ {
InvokeHelper(pEnv, obj, methodID, args, false); InvokeHelper(pEnv, obj, methodID, args, false);