JavaInstanceJobjectV8.cpp [plain text]
#include "config.h"
#include "JavaInstanceJobjectV8.h"
#if ENABLE(JAVA_BRIDGE)
#include "JNIUtilityPrivate.h"
#include "JavaClassJobjectV8.h"
#include "JavaFieldV8.h"
#include "JavaMethod.h"
#include <wtf/OwnArrayPtr.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/text/CString.h>
using namespace JSC::Bindings;
JavaInstanceJobject::JavaInstanceJobject(jobject instance)
: m_instance(new JobjectWrapper(instance))
{
}
#define NUM_LOCAL_REFS 64
void JavaInstanceJobject::begin()
{
getJNIEnv()->PushLocalFrame(NUM_LOCAL_REFS);
}
void JavaInstanceJobject::end()
{
getJNIEnv()->PopLocalFrame(0);
}
JavaClass* JavaInstanceJobject::getClass() const
{
if (!m_class)
m_class = adoptPtr(new JavaClassJobject(javaInstance()));
return m_class.get();
}
JavaValue JavaInstanceJobject::invokeMethod(const JavaMethod* method, JavaValue* args)
{
ASSERT(getClass()->methodsNamed(method->name().utf8().data()).find(method) != notFound);
unsigned int numParams = method->numParameters();
OwnArrayPtr<jvalue> jvalueArgs = adoptArrayPtr(new jvalue[numParams]);
for (unsigned int i = 0; i < numParams; ++i)
jvalueArgs[i] = javaValueToJvalue(args[i]);
jvalue result = callJNIMethod(javaInstance(), method->returnType(), method->name().utf8().data(), method->signature(), jvalueArgs.get());
return jvalueToJavaValue(result, method->returnType());
}
JavaValue JavaInstanceJobject::getField(const JavaField* field)
{
ASSERT(getClass()->fieldNamed(field->name().utf8().data()) == field);
return jvalueToJavaValue(getJNIField(javaInstance(), field->type(), field->name().utf8().data(), field->typeClassName()), field->type());
}
#endif // ENABLE(JAVA_BRIDGE)