[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/bindings/krossjava
From: Vincent Verhoeven <verhoevenv () gmail ! com>
Date: 2007-07-11 0:13:23
Message-ID: 1184112803.225674.16366.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 686293 by verhoevenv:
Boolean and UInt seem to be working. Double and QByteArray need some
more work. Test.java has been restructured slightly to keep some
structure.
M Test.class
M +46 -1 Test.java
M TestObject.class
M +11 -11 TestObject.java
M +5 -0 krossjava/java/KrossQExtension.java
M +3 -7 krossjava/jvmvariant.cpp
M +24 -10 krossjava/jvmvariant.h
M krossjava/kross.jar
--- trunk/playground/bindings/krossjava/Test.java #686292:686293
@@ -2,13 +2,58 @@
public class Test {
+ private TestObject to;
+
public Test() {
System.out.println("Hello World !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- TestObject to = (TestObject)(KrossClassLoader.importModule("TestObject"));
+ setUp();
+ testName();
+ testInt();
+ testUInt();
+ testString();
+ testBool();
+ testDouble(); //TODO: this doesn't pass yet
+ testByteArray(); //TODO: this neither
+ }
+
+ public void setUp() {
+ to = (TestObject)(KrossClassLoader.importModule("TestObject"));
+ }
+
+ public void testName() {
String name = to.name();
System.out.println("TestObject name=" + name);
+ }
+
+ public void testInt() {
System.out.println("TestObject.func_int_int(5)=" + to.func_int_int(5));
+ }
+
+ public void testUInt() {
+ System.out.println("TestObject.func_uint_uint(5)=" + to.func_uint_uint(5));
+ }
+
+ public void testString() {
System.out.println("TestObject.func_qstring_qstring(\"Kross Power!\")=" + \
to.func_qstring_qstring("Kross Power!")); }
+ public void testBool() {
+ System.out.println("TestObject.func_bool_bool(true)=" + \
to.func_bool_bool(true)); + }
+
+ public void testDouble() {
+ //TODO: this returns 3.0 instead of 3.14
+ System.out.println("TestObject.func_double_double(3.14)=" + \
to.func_double_double(3.14)); + }
+
+ public void testByteArray() {
+ //The problem here is that encapsulating every single byte in a Byte is very \
wasteful. + //And we also need this convertion on the C side, when reading in \
class files. + //However, byte[] is also a jobject, so perhaps it'll work like \
this. +
+ //Byte[] in = {new Byte((byte)65), new Byte((byte)0), new Byte((byte)66)};
+ byte[] in = {65, 0, 66};
+ byte[] out = to.func_qbytearray_qbytearray(in);
+ System.out.println("TestObject.func_qbytearray_qbytearray=(" + out[0] + "," \
+ out[1] + "," + out[2] + ")"); + }
}
--- trunk/playground/bindings/krossjava/TestObject.java #686292:686293
@@ -1,4 +1,6 @@
import org.kde.kdebindings.java.krossjava.*;
+import java.lang.*;
+import java.util.*;
public class TestObject extends KrossQExtension {
@@ -22,20 +24,18 @@
// are not able to handle more then 9 anyway + we would work around the rather \
expensive // list packing/unpacking.
- //public boolean func_bool_bool(boolean b){ return \
(boolean)invoke("func_bool_bool", b); } + public Boolean func_bool_bool(Boolean \
b){ return (Boolean)invoke("func_bool_bool", b); } public Integer \
func_int_int(Integer i){
- Object[] oa = {i};
- return (Integer)invoke("func_int_int", oa);
+ return (Integer)invoke("func_int_int", i);
}
- //public int func_uint_uint(int i){ return (int)invoke("func_uint_uint", i); }
- //public double func_double_double(double d){ return \
(double)invoke("func_double_double", d); }
- //public Byte[] func_qbytearray_qbytearray(Byte[] b){ return \
(Byte[])invoke("func_qbytearray_qbytearray", b); } + public Integer \
func_uint_uint(Integer i){ return (Integer)invoke("func_uint_uint", i); } + public \
Double func_double_double(Double d){ return (Double)invoke("func_double_double", d); \
} + public byte[] func_qbytearray_qbytearray(byte[] b){ return \
(byte[])invoke("func_qbytearray_qbytearray", b); } public String \
func_qstring_qstring(String s) {
- Object[] oa = {s};
- return (String)invoke("func_qstring_qstring", oa);
+ return (String)invoke("func_qstring_qstring", s);
}
- //public String[] func_qstringlist_qstringlist(String[] s){ return \
(String[])invoke("func_qstringlist_qstringlist", s); }
- //public ArrayList func_qvariantlist_qvariantlist(ArrayList l){ return \
(ArrayList)invoke("func_qvariantlist_qvariantlist", l); }
- //public Map func_qvariantmap_qvariantmap(Map m){ return \
(Map)invoke("func_qvariantmap_qvariantmap", m); } + public String[] \
func_qstringlist_qstringlist(String[] s){ return \
(String[])invoke("func_qstringlist_qstringlist", s); } + public ArrayList \
func_qvariantlist_qvariantlist(ArrayList l){ return \
(ArrayList)invoke("func_qvariantlist_qvariantlist", l); } + public Map \
func_qvariantmap_qvariantmap(Map m){ return \
(Map)invoke("func_qvariantmap_qvariantmap", m); }
}
--- trunk/playground/bindings/krossjava/krossjava/java/KrossQExtension.java \
#686292:686293 @@ -20,5 +20,10 @@
return invokeNative(getPointer(), name, null);
}
+ public Object invoke(String name, Object arg){
+ Object[] oa = {arg};
+ return invokeNative(getPointer(), name, oa);
+ }
+
private native Object invokeNative(long qobjpointer, String name, Object[] args);
}
\ No newline at end of file
--- trunk/playground/bindings/krossjava/krossjava/jvmvariant.cpp #686292:686293
@@ -30,19 +30,17 @@
switch( v.type() ) {
case QVariant::Int:
return JavaType<int>::toJObject(v.toInt(), env);
-#if 0
case QVariant::UInt:
return JavaType<uint>::toJObject(v.toUInt(), env);
case QVariant::Double:
return JavaType<double>::toJObject(v.toDouble(), env);
case QVariant::ByteArray:
return JavaType<QByteArray>::toJObject(v.toByteArray(), env);
-#endif
case QVariant::String:
return JavaType<QString>::toJObject(v.toString(), env);
-#if 0
case QVariant::Bool:
return JavaType<bool>::toJObject(v.toBool(), env);
+#if 0
case QVariant::StringList:
return JavaType<QStringList>::toJObject(v.toStringList(), env);
case QVariant::Map:
@@ -135,7 +133,6 @@
switch(typeId) {
case QVariant::Int:
return new JVMMetaTypeVariant<int>(value, env);
-#if 0
case QVariant::UInt:
return new JVMMetaTypeVariant<uint>(value, env);
case QVariant::Double:
@@ -144,7 +141,6 @@
return new JVMMetaTypeVariant<bool>(value, env);
case QVariant::ByteArray:
return new JVMMetaTypeVariant<QByteArray>(value, env);
-#endif
case QVariant::String:
return new JVMMetaTypeVariant<QString>(value, env);
#if 0
@@ -179,7 +175,7 @@
#if 0
if( JVMExtension::isJVMExtension(value) ) {
#ifdef KROSS_JVM_VARIANT_DEBUG
- krossdebug( QString("JVMMetaTypeFactory::create VALUE with \
typeId '%1' is a JVMExtension object").arg(typeId) ); + \
krossdebug( QString("JVMMetaTypeFactory::create jobject with typeId '%1' is a \
JVMExtension object").arg(typeId) ); #endif
JVMExtension* extension;
Data_Get_Struct(value, JVMExtension, extension);
@@ -203,7 +199,7 @@
//if(typeId == QVariant::Invalid) return new RubyVariantImpl<void>();
//return new RubyVariantImpl<QVariant>(v);
#endif
- krosswarning( QString("JVMMetaTypeFactory::create Not possible to \
convert the VALUE to QVariant with '%1' and metaid \
'%2'").arg(QVariant::typeToName((QVariant::Type)typeId)).arg(typeId) ); + \
krosswarning( QString("JVMMetaTypeFactory::create Not possible to convert the jobject \
to QVariant with '%1' and metaid \
'%2'").arg(QVariant::typeToName((QVariant::Type)typeId)).arg(typeId) ); return 0;
} break;
}
--- trunk/playground/bindings/krossjava/krossjava/jvmvariant.h #686292:686293
@@ -81,6 +81,7 @@
return js;
}
inline static QString toVariant(jobject value, JNIEnv* env) {
+ //TODO: the static_casting is unfortunate... Is there another way?
jstring jstr = static_cast<jstring>(value);
const char *str = env->GetStringUTFChars(jstr, 0);
QString s = str;
@@ -99,7 +100,8 @@
env->SetObjectArrayElement(objarray, i, \
JavaType<QString>::toJObject(list[i], env)); return objarray;
}
- inline static QStringList toVariant(jobjectArray objarray, JNIEnv* env) {
+ inline static QStringList toVariant(jobject value, JNIEnv* env) {
+ jobjectArray objarray = static_cast<jobjectArray>(value);
const jsize len = env->GetArrayLength(objarray);
const int count = len;
QStringList list;
@@ -124,7 +126,8 @@
env->SetByteArrayRegion(bytearray, 0, count, bytes);
return bytearray;
}
- inline static QByteArray toVariant(jbyteArray bytearray, JNIEnv* env) {
+ inline static QByteArray toVariant(jobject value, JNIEnv* env) {
+ jbyteArray bytearray = static_cast<jbyteArray>(value);
jsize len = env->GetArrayLength(bytearray);
int count = len;
char bytes[count];
@@ -148,15 +151,18 @@
}
};
-#if 0
template<>
struct JavaType<uint>
{
inline static jobject toJObject(int i, JNIEnv* env) {
- return quint32(i); //jint is signed 32 bits
+ jclass cl = env->FindClass("java/lang/Integer");
+ jmethodID ctor = env->GetMethodID(cl, "<init>", "(I)V");
+ return env->NewObject(cl, ctor, quint32(i));
}
inline static uint toVariant(jobject value, JNIEnv* env) {
- return quint32(value);
+ jclass cl = env->FindClass("java/lang/Integer");
+ jmethodID getval = env->GetMethodID(cl, "intValue", "()I");
+ return qint32(env->CallIntMethod(value, getval));
}
};
@@ -164,10 +170,14 @@
struct JavaType<double>
{
inline static jobject toJObject(double d, JNIEnv* env) {
- return d; //64 bits
+ jclass cl = env->FindClass("java/lang/Double");
+ jmethodID ctor = env->GetMethodID(cl, "<init>", "(D)V");
+ return env->NewObject(cl, ctor, d);
}
inline static double toVariant(jobject value, JNIEnv* env) {
- return value;
+ jclass cl = env->FindClass("java/lang/Double");
+ jmethodID getval = env->GetMethodID(cl, "doubleValue", "()D");
+ return qint32(env->CallDoubleMethod(value, getval));
}
};
@@ -175,13 +185,17 @@
struct JavaType<bool>
{
inline static jobject toJObject(bool b, JNIEnv* env) {
- return b ? JNI_TRUE : JNI_FALSE;
+ jclass cl = env->FindClass("java/lang/Boolean");
+ jmethodID ctor = env->GetMethodID(cl, "<init>", "(Z)V");
+ return env->NewObject(cl, ctor, b);
}
inline static bool toVariant(jobject value, JNIEnv* env) {
- return value == JNI_TRUE;
+ jclass cl = env->FindClass("java/lang/Boolean");
+ jmethodID getval = env->GetMethodID(cl, "booleanValue", "()Z");
+ return env->CallBooleanMethod(value, getval);
}
};
-
+#if 0
template<>
struct JavaType<qlonglong>
{
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic