зеркало из https://github.com/mono/ikvm-fork.git
Fix for #2829717. Constructing java.lang.String instances should redirect to static helper method.
This commit is contained in:
Родитель
8a9fc7420b
Коммит
cb136e677f
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче