obj = TruffleFunction.create(languageContext, truffleObject, returnType.clazz, returnType.type); } else if (!TruffleOptions.AOT && ForeignAccess.sendHasKeys(hasKeysNode, truffleObject)) { obj = JavaInteropReflect.newProxyInstance(targetType, truffleObject, languageContext); } else { throw JavaInteropErrors.cannotConvert(languageContext, truffleObject, targetType, "Value must be executable or instantiable."); obj = JavaInteropReflect.asJavaFunction(targetType, truffleObject, languageContext); } else if (ForeignAccess.sendHasKeys(hasKeysNode, truffleObject)) { obj = JavaInteropReflect.newProxyInstance(targetType, truffleObject, languageContext); } else { if (languageContext == null) { obj = JavaInteropReflect.newProxyInstance(targetType, truffleObject, languageContext); } else { throw JavaInteropErrors.cannotConvert(languageContext, truffleObject, targetType, "Value must have members.");