rjb 1.2.1-x86-mswin32-60 → 1.2.8-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +65 -0
- data/ext/jp_co_infoseek_hp_arton_rjb_RBridge.h +21 -21
- data/ext/load.c +24 -9
- data/ext/riconv.c +9 -2
- data/ext/rjb.c +68 -22
- data/ext/rjb.h +5 -1
- data/ext/rjbexception.c +25 -5
- data/lib/rjb.rb +68 -0
- data/lib/rjbcore.so +0 -0
- data/lib/rjbextension.rb +135 -0
- data/test/exttest.rb +34 -0
- data/test/m.rb +20 -0
- data/test/rjbtest.jar +0 -0
- data/test/test.rb +44 -7
- metadata +23 -5
data/ChangeLog
CHANGED
@@ -1,3 +1,68 @@
|
|
1
|
+
Fri Sep 17 arton
|
2
|
+
*test/test.rb
|
3
|
+
sort arguments order for test_java_methods (the order is implement dependent)
|
4
|
+
add fixnum conversion test for 64bit platform (test_64fixnum)
|
5
|
+
*ext/rjb.c
|
6
|
+
RJV_VERSION -> 1.2.8
|
7
|
+
fix rv2jlong bug, the solution was suggested by Ary Borenszweig
|
8
|
+
Sun Aug 29 arton
|
9
|
+
*ext/rjb.c
|
10
|
+
ignore no arguments method signature.
|
11
|
+
name base classes under Rjb module.
|
12
|
+
*lib/rjb.rb
|
13
|
+
implements public_methods and methods
|
14
|
+
*test/test.rb
|
15
|
+
add non arguments method sig test
|
16
|
+
add methods, public_methods, java_methods test
|
17
|
+
Thu Jul 22 arton
|
18
|
+
*ext/rjb.c
|
19
|
+
RJB_VERSION -> 1.2.6
|
20
|
+
export jv2rv for rjbexception.c
|
21
|
+
*ext/rjb.h
|
22
|
+
export jv2rv for rjbexception.c
|
23
|
+
*ext/rjbexception.c
|
24
|
+
create and keep java exception object for its properties.
|
25
|
+
*test/test.rb
|
26
|
+
add Exception#cause test
|
27
|
+
Wed Jun 9 arton
|
28
|
+
*ext/load.c
|
29
|
+
accept JAVA_HOME having an extra slash at the end
|
30
|
+
*ext/rjb.c
|
31
|
+
RJB_VERSION -> 1.2.5
|
32
|
+
Fri Jun 5 arton
|
33
|
+
*ext/rjb.h
|
34
|
+
defin HAVE_LONG_LONG if no HAVE_LONG_LONG but LP64
|
35
|
+
*ext/rjb.c
|
36
|
+
remove unused variables
|
37
|
+
RJB_VERSION -> 1.2.4
|
38
|
+
Fri Jun 4 arton
|
39
|
+
*ext/riconv.c
|
40
|
+
remove unused function if build with Ruby 1.9
|
41
|
+
*ext/rjb.c
|
42
|
+
RJB_VERSION -> 1.2.3
|
43
|
+
to accomodate with rubinius
|
44
|
+
*ext/load.c
|
45
|
+
to accomodate with rubinius
|
46
|
+
*ext/rjbexception.c
|
47
|
+
to accomodate with rubinius
|
48
|
+
Sun May 30 arton
|
49
|
+
*lib/rjbextension.rb
|
50
|
+
Rjb extension from Andreas Ronge's neo4j
|
51
|
+
- directly import jar by require method
|
52
|
+
- Rjb::import without quotations (Java class as Ruby object)
|
53
|
+
*test/exttest.rb
|
54
|
+
test for rjbextension.rb
|
55
|
+
*test/rjbtest.jar
|
56
|
+
test file for rjbextension.rb
|
57
|
+
Sat May 29 arton on behalf of atoulme
|
58
|
+
*ext/rjb.c
|
59
|
+
*ext/load.c
|
60
|
+
*ext/rjbexception.c
|
61
|
+
to accomodate with rubinius
|
62
|
+
thanks atoulme !
|
63
|
+
Wed May 12 arton
|
64
|
+
*test/test.rb
|
65
|
+
add Class name for TestMixin module because ruby 1.9 doesn't handle the constant.
|
1
66
|
Tue May 11 arton
|
2
67
|
*ext/rjb.c
|
3
68
|
fix duplicate method registering while no alias.
|
@@ -1,21 +1,21 @@
|
|
1
|
-
/* DO NOT EDIT THIS FILE - it is machine generated */
|
2
|
-
#include <jni.h>
|
3
|
-
/* Header for class jp_co_infoseek_hp_arton_rjb_RBridge */
|
4
|
-
|
5
|
-
#ifndef _Included_jp_co_infoseek_hp_arton_rjb_RBridge
|
6
|
-
#define _Included_jp_co_infoseek_hp_arton_rjb_RBridge
|
7
|
-
#ifdef __cplusplus
|
8
|
-
extern "C" {
|
9
|
-
#endif
|
10
|
-
/*
|
11
|
-
* Class: jp_co_infoseek_hp_arton_rjb_RBridge
|
12
|
-
* Method: call
|
13
|
-
* Signature: (Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
|
14
|
-
*/
|
15
|
-
JNIEXPORT jobject JNICALL Java_jp_co_infoseek_hp_arton_rjb_RBridge_call
|
16
|
-
(JNIEnv *, jobject, jstring, jobject, jobjectArray);
|
17
|
-
|
18
|
-
#ifdef __cplusplus
|
19
|
-
}
|
20
|
-
#endif
|
21
|
-
#endif
|
1
|
+
/* DO NOT EDIT THIS FILE - it is machine generated */
|
2
|
+
#include <jni.h>
|
3
|
+
/* Header for class jp_co_infoseek_hp_arton_rjb_RBridge */
|
4
|
+
|
5
|
+
#ifndef _Included_jp_co_infoseek_hp_arton_rjb_RBridge
|
6
|
+
#define _Included_jp_co_infoseek_hp_arton_rjb_RBridge
|
7
|
+
#ifdef __cplusplus
|
8
|
+
extern "C" {
|
9
|
+
#endif
|
10
|
+
/*
|
11
|
+
* Class: jp_co_infoseek_hp_arton_rjb_RBridge
|
12
|
+
* Method: call
|
13
|
+
* Signature: (Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
|
14
|
+
*/
|
15
|
+
JNIEXPORT jobject JNICALL Java_jp_co_infoseek_hp_arton_rjb_RBridge_call
|
16
|
+
(JNIEnv *, jobject, jstring, jobject, jobjectArray);
|
17
|
+
|
18
|
+
#ifdef __cplusplus
|
19
|
+
}
|
20
|
+
#endif
|
21
|
+
#endif
|
data/ext/load.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Rjb - Ruby <-> Java Bridge
|
3
|
-
* Copyright(c) 2004,2005,2006,2009 arton
|
3
|
+
* Copyright(c) 2004,2005,2006,2009,2010 arton
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: load.c
|
15
|
+
* $Id: load.c 124 2010-06-08 18:24:45Z arton $
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include <stdlib.h>
|
@@ -104,11 +104,13 @@ static int open_jvm(char* libpath)
|
|
104
104
|
VALUE* argv;
|
105
105
|
|
106
106
|
rb_require("dl");
|
107
|
+
#if !defined(RUBINIUS)
|
107
108
|
if (!rb_const_defined_at(rb_cObject, rb_intern("DL")))
|
108
109
|
{
|
109
110
|
rb_raise(rb_eRuntimeError, "Constants DL is not defined.");
|
110
111
|
return 0;
|
111
112
|
}
|
113
|
+
#endif
|
112
114
|
argv = ALLOCA_N(VALUE, 4);
|
113
115
|
*argv = rb_const_get(rb_cObject, rb_intern("DL"));
|
114
116
|
*(argv + 1) = rb_intern("dlopen");
|
@@ -146,12 +148,20 @@ static int load_jvm(char* jvmtype)
|
|
146
148
|
}
|
147
149
|
else
|
148
150
|
{
|
149
|
-
if (strlen(jh) > HOME_NAME_LEN
|
150
|
-
&& strcasecmp(jh + strlen(jh) - HOME_NAME_LEN, HOME_NAME) == 0)
|
151
|
+
if (strlen(jh) > HOME_NAME_LEN)
|
151
152
|
{
|
152
|
-
|
153
|
-
|
154
|
-
jh = p;
|
153
|
+
int len = strlen(jh);
|
154
|
+
char* p = ALLOCA_N(char, len + 8);
|
155
|
+
jh = strcpy(p, jh);
|
156
|
+
if (*(jh + len - 1) == '/')
|
157
|
+
{
|
158
|
+
--len;
|
159
|
+
*(jh + len) = '\0';
|
160
|
+
}
|
161
|
+
if (strcasecmp(jh + len - HOME_NAME_LEN, HOME_NAME) == 0)
|
162
|
+
{
|
163
|
+
strcpy(p + len, "/..");
|
164
|
+
}
|
155
165
|
}
|
156
166
|
}
|
157
167
|
#endif
|
@@ -204,8 +214,13 @@ static int load_bridge(JNIEnv* jenv)
|
|
204
214
|
jmethodID getSysLoader = (*jenv)->GetStaticMethodID(jenv, loader,
|
205
215
|
"getSystemClassLoader", "()Ljava/lang/ClassLoader;");
|
206
216
|
jobject iloader = (*jenv)->CallStaticObjectMethod(jenv, loader, getSysLoader);
|
217
|
+
#if defined(RUBINIUS)
|
218
|
+
VALUE v = rb_const_get(rb_cObject, rb_intern("RjbConf"));
|
219
|
+
v = rb_const_get(v, rb_intern("BRIDGE_FILE"));
|
220
|
+
#else
|
207
221
|
VALUE v = rb_const_get_at(rb_const_get(rb_cObject, rb_intern("RjbConf")),
|
208
222
|
rb_intern("BRIDGE_FILE"));
|
223
|
+
#endif
|
209
224
|
bridge = StringValuePtr(v);
|
210
225
|
#if defined(DOSISH)
|
211
226
|
bridge = ALLOCA_N(char, strlen(bridge) + 8);
|
@@ -295,7 +310,8 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
|
|
295
310
|
}
|
296
311
|
#endif
|
297
312
|
}
|
298
|
-
|
313
|
+
|
314
|
+
#if RJB_RUBY_VERSION_CODE < 190 && !defined(RUBINIUS)
|
299
315
|
ruby_errinfo = Qnil;
|
300
316
|
#else
|
301
317
|
rb_set_errinfo(Qnil);
|
@@ -366,4 +382,3 @@ int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs* vm_args, char* userpath, VALU
|
|
366
382
|
}
|
367
383
|
return result;
|
368
384
|
}
|
369
|
-
|
data/ext/riconv.c
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: riconv.c
|
15
|
+
* $Id: riconv.c 117 2010-06-04 12:16:25Z arton $
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include "ruby.h"
|
@@ -43,6 +43,7 @@ static const char* const CS_SJIS = "SHIFT_JIS";
|
|
43
43
|
static const char* const CS_UTF8 = "UTF-8";
|
44
44
|
|
45
45
|
|
46
|
+
#if RJB_RUBY_VERSION_CODE < 190
|
46
47
|
static VALUE objIconvJ2R;
|
47
48
|
static VALUE objIconvR2J;
|
48
49
|
static const char* charcode; //is this necessary?
|
@@ -58,7 +59,9 @@ static int find_table(const char* const str, const char* const table[])
|
|
58
59
|
}
|
59
60
|
return 0;
|
60
61
|
}
|
62
|
+
#endif
|
61
63
|
|
64
|
+
#if RJB_RUBY_VERSION_CODE < 190
|
62
65
|
static const char* get_charcode_name_by_locale(const char* const name)
|
63
66
|
{
|
64
67
|
if (find_table(name, LOCALE_UTF8_TABLE))
|
@@ -119,8 +122,9 @@ static const char* get_charcode_name()
|
|
119
122
|
}
|
120
123
|
return result;
|
121
124
|
}
|
125
|
+
#endif
|
122
126
|
|
123
|
-
|
127
|
+
#if RJB_RUBY_VERSION_CODE < 190
|
124
128
|
static void reinit()
|
125
129
|
{
|
126
130
|
charcode = get_charcode_name();
|
@@ -142,7 +146,9 @@ static void reinit()
|
|
142
146
|
objIconvR2J = objIconvJ2R = Qnil;
|
143
147
|
}
|
144
148
|
}
|
149
|
+
#endif
|
145
150
|
|
151
|
+
#if RJB_RUBY_VERSION_CODE < 190
|
146
152
|
static void check_kcode()
|
147
153
|
{
|
148
154
|
VALUE rb_iconv_klass = rb_const_get(rb_cObject, rb_intern("Iconv"));
|
@@ -161,6 +167,7 @@ static void check_kcode()
|
|
161
167
|
objIconvR2J = objIconvJ2R = Qnil;
|
162
168
|
}
|
163
169
|
}
|
170
|
+
#endif
|
164
171
|
|
165
172
|
VALUE exticonv_local_to_utf8(VALUE local_string)
|
166
173
|
{
|
data/ext/rjb.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Rjb - Ruby <-> Java Bridge
|
3
|
-
* Copyright(c) 2004,2005,2006,2007,2008,2009 arton
|
3
|
+
* Copyright(c) 2004,2005,2006,2007,2008,2009,2010 arton
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -12,10 +12,10 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: rjb.c
|
15
|
+
* $Id: rjb.c 131 2010-09-16 15:53:33Z arton $
|
16
16
|
*/
|
17
17
|
|
18
|
-
#define RJB_VERSION "1.2.
|
18
|
+
#define RJB_VERSION "1.2.8"
|
19
19
|
|
20
20
|
#include "ruby.h"
|
21
21
|
#include "extconf.h"
|
@@ -55,7 +55,14 @@
|
|
55
55
|
#define RJB_LOAD_STATIC_METHOD(var, obj, name, sig) \
|
56
56
|
var = (*jenv)->GetStaticMethodID(jenv, obj, name, sig); \
|
57
57
|
rjb_check_exception(jenv, 1)
|
58
|
-
#
|
58
|
+
#if defined(RUBINIUS)
|
59
|
+
#define CLASS_NEW(obj, name) rb_define_class_under(rjb, name, obj)
|
60
|
+
#define CLASS_INHERITED(spr, kls) rb_funcall(spr, rb_intern("inherited"), 1, kls)
|
61
|
+
#else
|
62
|
+
#define CLASS_NEW(obj, name) rb_define_class_under(rjb, name, obj)
|
63
|
+
#define CLASS_INHERITED(spr, kls) rb_class_inherited(spr, kls)
|
64
|
+
#endif
|
65
|
+
#define IS_RJB_OBJECT(v) (CLASS_INHERITED(rjbi, rb_obj_class(v)) || rb_obj_class(v) == rjb)
|
59
66
|
#define USER_INITIALIZE "@user_initialize"
|
60
67
|
|
61
68
|
static void register_class(VALUE, VALUE);
|
@@ -296,7 +303,7 @@ static VALUE jv2rv_r(JNIEnv* jenv, jvalue val)
|
|
296
303
|
return v;
|
297
304
|
}
|
298
305
|
|
299
|
-
|
306
|
+
VALUE jv2rv(JNIEnv* jenv, jvalue val)
|
300
307
|
{
|
301
308
|
if (RTEST(primitive_conversion))
|
302
309
|
{
|
@@ -652,7 +659,7 @@ static void rv2jlong(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int
|
|
652
659
|
switch (TYPE(val))
|
653
660
|
{
|
654
661
|
case T_FIXNUM:
|
655
|
-
jv->j =
|
662
|
+
jv->j = FIX2LONG(val);
|
656
663
|
break;
|
657
664
|
default:
|
658
665
|
#if HAVE_LONG_LONG
|
@@ -665,8 +672,17 @@ static void rv2jlong(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int
|
|
665
672
|
}
|
666
673
|
static void rv2jshort(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int release)
|
667
674
|
{
|
668
|
-
if (
|
669
|
-
|
675
|
+
if (release) return;
|
676
|
+
if (TYPE(val) == T_FIXNUM)
|
677
|
+
{
|
678
|
+
int n = FIX2INT(val);
|
679
|
+
if (abs(n) < 0x7fff)
|
680
|
+
{
|
681
|
+
jv->s = (short)n;
|
682
|
+
return;
|
683
|
+
}
|
684
|
+
}
|
685
|
+
rb_raise(rb_eRuntimeError, "can't change to short");
|
670
686
|
}
|
671
687
|
static void rv2jboolean(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int release)
|
672
688
|
{
|
@@ -774,13 +790,13 @@ static void rv2jobject(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, in
|
|
774
790
|
Data_Get_Struct(val, struct jvi_data, ptr);
|
775
791
|
jv->l = ptr->obj;
|
776
792
|
}
|
777
|
-
else if (
|
793
|
+
else if (rb_obj_class(val) == rjbb)
|
778
794
|
{
|
779
795
|
struct rj_bridge* ptr;
|
780
796
|
Data_Get_Struct(val, struct rj_bridge, ptr);
|
781
797
|
jv->l = ptr->proxy;
|
782
798
|
}
|
783
|
-
else if (
|
799
|
+
else if (CLASS_INHERITED(rjbc, rb_obj_class(val)))
|
784
800
|
{
|
785
801
|
struct jv_data* ptr;
|
786
802
|
Data_Get_Struct(val, struct jv_data, ptr);
|
@@ -1596,14 +1612,14 @@ static void load_constants(JNIEnv* jenv, jclass klass, VALUE self, jobjectArray
|
|
1596
1612
|
strcpy(pname, cname);
|
1597
1613
|
*pname = toupper(*pname);
|
1598
1614
|
if (!isupper(*pname)
|
1599
|
-
|| rb_const_defined(
|
1615
|
+
|| rb_const_defined(rb_obj_class(self), rb_intern(pname)))
|
1600
1616
|
{
|
1601
1617
|
pname = NULL;
|
1602
1618
|
}
|
1603
1619
|
}
|
1604
1620
|
if (pname)
|
1605
1621
|
{
|
1606
|
-
rb_define_const(
|
1622
|
+
rb_define_const(rb_obj_class(self), pname, j2r(jenv, jv));
|
1607
1623
|
}
|
1608
1624
|
rjb_release_string(jenv, nm, cname);
|
1609
1625
|
}
|
@@ -1735,8 +1751,8 @@ static VALUE rjb_s_load(int argc, VALUE* argv, VALUE self)
|
|
1735
1751
|
}
|
1736
1752
|
|
1737
1753
|
jklass = import_class(jenv, j_class, rb_str_new2("java.lang.Class"));
|
1738
|
-
rb_define_method(
|
1739
|
-
rb_define_method(
|
1754
|
+
rb_define_method(rb_singleton_class(jklass), "forName", rjb_class_forname, -1);
|
1755
|
+
rb_define_method(rb_singleton_class(jklass), "for_name", rjb_class_forname, -1);
|
1740
1756
|
rb_gc_register_address(&jklass);
|
1741
1757
|
|
1742
1758
|
return Qnil;
|
@@ -1780,7 +1796,16 @@ static int clear_classes(VALUE key, VALUE val, VALUE dummy)
|
|
1780
1796
|
static VALUE rjb_s_unload(int argc, VALUE* argv, VALUE self)
|
1781
1797
|
{
|
1782
1798
|
int result = 0;
|
1799
|
+
#if defined(HAVE_RB_HASH_FOREACH) || defined(RUBINIUS)
|
1800
|
+
rb_hash_foreach(rjb_loaded_classes, clear_classes, 0);
|
1801
|
+
#else
|
1802
|
+
#if defined(RHASH_TBL)
|
1783
1803
|
st_foreach(RHASH_TBL(rjb_loaded_classes), clear_classes, 0);
|
1804
|
+
#else
|
1805
|
+
st_foreach(RHASH(rjb_loaded_classes)->tbl, clear_classes, 0);
|
1806
|
+
#endif
|
1807
|
+
#endif
|
1808
|
+
|
1784
1809
|
if (rjb_jvm)
|
1785
1810
|
{
|
1786
1811
|
JNIEnv* jenv = rjb_attach_current_thread();
|
@@ -2165,7 +2190,11 @@ static VALUE get_signatures(VALUE mname, st_table* st)
|
|
2165
2190
|
ret = rb_ary_new();
|
2166
2191
|
for (; pm; pm = pm->next)
|
2167
2192
|
{
|
2168
|
-
|
2193
|
+
if (pm->basic.method_signature) {
|
2194
|
+
rb_ary_push(ret, rb_str_new2(pm->basic.method_signature));
|
2195
|
+
} else {
|
2196
|
+
rb_ary_push(ret, Qnil);
|
2197
|
+
}
|
2169
2198
|
}
|
2170
2199
|
return ret;
|
2171
2200
|
}
|
@@ -2254,8 +2283,11 @@ static VALUE rjb_class_eval(int argc, VALUE* argv, VALUE self)
|
|
2254
2283
|
*/
|
2255
2284
|
static VALUE rjb_s_unbind(VALUE self, VALUE rbobj)
|
2256
2285
|
{
|
2257
|
-
|
2286
|
+
#if defined(RUBINIUS)
|
2287
|
+
return rb_funcall(proxies, rb_intern("delete"), 1, rbobj);
|
2288
|
+
#else
|
2258
2289
|
return rb_ary_delete(proxies, rbobj);
|
2290
|
+
#endif
|
2259
2291
|
}
|
2260
2292
|
|
2261
2293
|
/*
|
@@ -2293,7 +2325,16 @@ static void register_class(VALUE self, VALUE clsname)
|
|
2293
2325
|
/*
|
2294
2326
|
* the hash was frozen, so it need to call st_ func directly.
|
2295
2327
|
*/
|
2328
|
+
|
2329
|
+
#if defined(HAVE_RB_HASH_ASET) || defined(RUBINIUS)
|
2330
|
+
rb_hash_aset(rjb_loaded_classes, clsname, self);
|
2331
|
+
#else
|
2332
|
+
#ifdef RHASH_TBL
|
2296
2333
|
st_insert(RHASH_TBL(rjb_loaded_classes), clsname, self);
|
2334
|
+
#else
|
2335
|
+
st_insert(RHASH(rjb_loaded_classes)->tbl, clsname, self);
|
2336
|
+
#endif
|
2337
|
+
#endif
|
2297
2338
|
}
|
2298
2339
|
|
2299
2340
|
/*
|
@@ -2796,7 +2837,7 @@ static VALUE rjb_missing(int argc, VALUE* argv, VALUE self)
|
|
2796
2837
|
{
|
2797
2838
|
VALUE r, args[2];
|
2798
2839
|
int state = 0;
|
2799
|
-
args[0] =
|
2840
|
+
args[0] = rb_obj_class(self);
|
2800
2841
|
args[1] = rmid;
|
2801
2842
|
r = rb_protect(find_const, (VALUE)args, &state);
|
2802
2843
|
if (!state)
|
@@ -2832,15 +2873,20 @@ static VALUE rjb_class_forname(int argc, VALUE* argv, VALUE self)
|
|
2832
2873
|
*/
|
2833
2874
|
void Init_rjbcore()
|
2834
2875
|
{
|
2876
|
+
#if defined(RUBINIUS)
|
2877
|
+
rb_require("iconv");
|
2878
|
+
#else
|
2835
2879
|
rb_protect((VALUE(*)(VALUE))rb_require, (VALUE)"iconv", NULL);
|
2836
|
-
|
2880
|
+
#endif
|
2837
2881
|
rjb_loaded_classes = rb_hash_new();
|
2882
|
+
#ifndef RUBINIUS
|
2838
2883
|
OBJ_FREEZE(rjb_loaded_classes);
|
2884
|
+
#endif
|
2839
2885
|
rb_global_variable(&rjb_loaded_classes);
|
2840
2886
|
proxies = rb_ary_new();
|
2841
2887
|
rb_global_variable(&proxies);
|
2842
2888
|
user_initialize = rb_intern(USER_INITIALIZE);
|
2843
|
-
|
2889
|
+
|
2844
2890
|
rjb = rb_define_module("Rjb");
|
2845
2891
|
rb_define_module_function(rjb, "load", rjb_s_load, -1);
|
2846
2892
|
rb_define_module_function(rjb, "unload", rjb_s_unload, -1);
|
@@ -2854,14 +2900,14 @@ void Init_rjbcore()
|
|
2854
2900
|
rb_define_const(rjb, "VERSION", rb_str_new2(RJB_VERSION));
|
2855
2901
|
|
2856
2902
|
/* Java class object */
|
2857
|
-
rjbc =
|
2903
|
+
rjbc = CLASS_NEW(rb_cObject, "Rjb_JavaClass");
|
2858
2904
|
rb_gc_register_address(&rjbc);
|
2859
2905
|
rb_define_method(rjbc, "method_missing", rjb_missing, -1);
|
2860
2906
|
rb_define_method(rjbc, "_invoke", rjb_invoke, -1);
|
2861
2907
|
rb_define_method(rjbc, "_classname", rjb_i_class, 0);
|
2862
2908
|
|
2863
2909
|
/* Java instance object */
|
2864
|
-
rjbi =
|
2910
|
+
rjbi = CLASS_NEW(rb_cObject, "Rjb_JavaProxy");
|
2865
2911
|
rb_gc_register_address(&rjbi);
|
2866
2912
|
rb_define_method(rjbi, "method_missing", rjb_i_missing, -1);
|
2867
2913
|
rb_define_method(rjbi, "_invoke", rjb_i_invoke, -1);
|
@@ -2870,7 +2916,7 @@ void Init_rjbcore()
|
|
2870
2916
|
rb_define_alias(rjbi, "include", "extend");
|
2871
2917
|
|
2872
2918
|
/* Ruby-Java Bridge object */
|
2873
|
-
rjbb =
|
2919
|
+
rjbb = CLASS_NEW(rb_cObject, "Rjb_JavaBridge");
|
2874
2920
|
rb_gc_register_address(&rjbb);
|
2875
2921
|
}
|
2876
2922
|
|
data/ext/rjb.h
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: rjb.h
|
15
|
+
* $Id: rjb.h 126 2010-07-22 13:58:15Z arton $
|
16
16
|
* $Log: rjb.h,v $
|
17
17
|
* Revision 1.1 2005/01/16 17:36:10 arton
|
18
18
|
* Initial revision
|
@@ -53,6 +53,9 @@
|
|
53
53
|
#define _I64_MAX 9223372036854775807i64
|
54
54
|
#endif
|
55
55
|
|
56
|
+
#if !defined(HAVE_LONG_LONG) && defined(__LP64__)
|
57
|
+
#define HAVE_LONG_LONG 1
|
58
|
+
#endif
|
56
59
|
|
57
60
|
/* in load.c */
|
58
61
|
extern int rjb_create_jvm(JNIEnv** pjenv, JavaVMInitArgs*, char*, VALUE);
|
@@ -70,6 +73,7 @@ extern jclass rjb_find_class(JNIEnv* jenv, VALUE name);
|
|
70
73
|
extern void rjb_release_string(JNIEnv *jenv, jstring str, const char* chrs);
|
71
74
|
extern VALUE rjb_load_vm_default();
|
72
75
|
extern VALUE rjb_safe_funcall(VALUE args);
|
76
|
+
extern VALUE jv2rv(JNIEnv* jenv, jvalue val);
|
73
77
|
|
74
78
|
/* in rjbexception.c */
|
75
79
|
extern VALUE rjb_get_exception_class(JNIEnv* jenv, jstring str);
|
data/ext/rjbexception.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Rjb - Ruby <-> Java Bridge
|
3
|
-
* Copyright(c) 2004,2005,2006 arton
|
3
|
+
* Copyright(c) 2004,2005,2006,2010 arton
|
4
4
|
*
|
5
5
|
* This library is free software; you can redistribute it and/or
|
6
6
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -12,7 +12,7 @@
|
|
12
12
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
13
|
* Lesser General Public License for more details.
|
14
14
|
*
|
15
|
-
* $Id: rjbexception.c
|
15
|
+
* $Id: rjbexception.c 126 2010-07-22 13:58:15Z arton $
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include "ruby.h"
|
@@ -26,6 +26,12 @@
|
|
26
26
|
#include "riconv.h"
|
27
27
|
#include "rjb.h"
|
28
28
|
|
29
|
+
static VALUE missing_delegate(int argc, VALUE* argv, VALUE self)
|
30
|
+
{
|
31
|
+
ID rmid = rb_to_id(argv[0]);
|
32
|
+
return rb_funcall(rb_ivar_get(self, rb_intern("@cause")), rmid, argc - 1, argv + 1);
|
33
|
+
}
|
34
|
+
|
29
35
|
/*
|
30
36
|
* handle Java exception
|
31
37
|
* At this time, the Java exception is defined without the package name.
|
@@ -54,7 +60,17 @@ VALUE rjb_get_exception_class(JNIEnv* jenv, jstring str)
|
|
54
60
|
if (rexp == Qnil)
|
55
61
|
{
|
56
62
|
rexp = rb_define_class(pcls, rb_eStandardError);
|
57
|
-
|
63
|
+
rb_define_method(rexp, "method_missing", missing_delegate, -1);
|
64
|
+
#if defined(HAVE_RB_HASH_ASET) || defined(RUBINIUS)
|
65
|
+
rb_hash_aset(rjb_loaded_classes, cname, rexp);
|
66
|
+
#else
|
67
|
+
#ifdef RHASH_TBL
|
68
|
+
st_insert(RHASH_TBL(rjb_loaded_classes), cname, rexp);
|
69
|
+
#else
|
70
|
+
st_insert(RHASH(rjb_loaded_classes)->tbl, cname, rexp);
|
71
|
+
#endif
|
72
|
+
#endif
|
73
|
+
|
58
74
|
}
|
59
75
|
return rexp;
|
60
76
|
}
|
@@ -128,13 +144,17 @@ void rjb_check_exception(JNIEnv* jenv, int t)
|
|
128
144
|
}
|
129
145
|
if (rexp == Qnil)
|
130
146
|
{
|
147
|
+
(*jenv)->DeleteLocalRef(jenv, exp);
|
131
148
|
rb_raise(rb_eRuntimeError, "%s", msg);
|
132
149
|
}
|
133
150
|
else
|
134
151
|
{
|
135
|
-
|
152
|
+
VALUE rexpi = rb_funcall(rexp, rb_intern("new"), 1, rb_str_new2(msg));
|
153
|
+
jvalue val;
|
154
|
+
val.l = exp;
|
155
|
+
rb_ivar_set(rexpi, rb_intern("@cause"), jv2rv(jenv, val));
|
156
|
+
rb_exc_raise(rexpi);
|
136
157
|
}
|
137
158
|
}
|
138
159
|
}
|
139
160
|
}
|
140
|
-
|
data/lib/rjb.rb
CHANGED
@@ -20,4 +20,72 @@ end
|
|
20
20
|
|
21
21
|
require 'rjbcore'
|
22
22
|
|
23
|
+
module Rjb
|
24
|
+
MODIFIER = import('java.lang.reflect.Modifier')
|
23
25
|
|
26
|
+
module JMethod
|
27
|
+
def instance_method?(m)
|
28
|
+
m.modifiers & MODIFIER.STATIC == 0
|
29
|
+
end
|
30
|
+
def public_method?(m)
|
31
|
+
(m.modifiers & MODIFIER.PUBLIC) == MODIFIER.PUBLIC
|
32
|
+
end
|
33
|
+
def jmethods(org, klass, &blk)
|
34
|
+
(org + klass.getMethods.select do |m|
|
35
|
+
blk.call(m)
|
36
|
+
end.map do |m|
|
37
|
+
m.name
|
38
|
+
end).uniq
|
39
|
+
end
|
40
|
+
def format_sigs(s)
|
41
|
+
if s.size < 0
|
42
|
+
''
|
43
|
+
elsif s.size == 1
|
44
|
+
s[0]
|
45
|
+
else
|
46
|
+
"[#{s.map{|m|m.nil? ? 'void' : m}.join(', ')}]"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class Rjb_JavaClass
|
52
|
+
include JMethod
|
53
|
+
def public_methods(inh = true)
|
54
|
+
jmethods(super(inh), self) do |m|
|
55
|
+
!instance_method?(m) && public_method?(m)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
def methods(inh = true)
|
59
|
+
jmethods(super(inh), self) do |m|
|
60
|
+
!instance_method?(m) && public_method?(m)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
def java_methods
|
64
|
+
jmethods([], self) do |m|
|
65
|
+
!instance_method?(m) && public_method?(m)
|
66
|
+
end.map do |m|
|
67
|
+
"#{m}(#{format_sigs(self.static_sigs(m))})"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
class Rjb_JavaProxy
|
72
|
+
include JMethod
|
73
|
+
def public_methods(inh = true)
|
74
|
+
jmethods(super(inh), getClass) do |m|
|
75
|
+
instance_method?(m) && public_method?(m)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
def methods(inh = true)
|
79
|
+
jmethods(super(inh), getClass) do |m|
|
80
|
+
instance_method?(m) && public_method?(m)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
def java_methods
|
84
|
+
jmethods([], getClass) do |m|
|
85
|
+
instance_method?(m) && public_method?(m)
|
86
|
+
end.map do |m|
|
87
|
+
"#{m}(#{format_sigs(getClass.sigs(m))})"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/rjbcore.so
CHANGED
Binary file
|
data/lib/rjbextension.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright(c) 2010 arton
|
3
|
+
|
4
|
+
This library is free software; you can redistribute it and/or
|
5
|
+
modify it under the terms of the GNU Lesser General Public
|
6
|
+
License as published by the Free Software Foundation; either
|
7
|
+
version 2.1 of the License, or (at your option) any later version.
|
8
|
+
|
9
|
+
This library is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
Lesser General Public License for more details.
|
13
|
+
|
14
|
+
$Id: rjbextension.rb 116 2010-05-30 14:23:07Z arton $
|
15
|
+
|
16
|
+
This file is from Andreas Ronge project neo4j
|
17
|
+
http://github.com/andreasronge/neo4j/blob/rjb/lib/rjb_ext.rb
|
18
|
+
|
19
|
+
Copyright (c) 2008 Andreas Ronge
|
20
|
+
|
21
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
22
|
+
of this software and associated documentation files (the "Software"), to deal
|
23
|
+
in the Software without restriction, including without limitation the rights
|
24
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
25
|
+
copies of the Software, and to permit persons to whom the Software is
|
26
|
+
furnished to do so, subject to the following conditions:
|
27
|
+
|
28
|
+
The above copyright notice and this permission notice shall be included in
|
29
|
+
all copies or substantial portions of the Software.
|
30
|
+
|
31
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
32
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
33
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
34
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
35
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
36
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
37
|
+
THE SOFTWARE.
|
38
|
+
=end
|
39
|
+
|
40
|
+
# Loads the JVM with the given <tt>classpath</tt> and arguments to the jre.
|
41
|
+
# All needed .jars should be included in <tt>classpath</tt>.
|
42
|
+
|
43
|
+
module Kernel
|
44
|
+
alias rjb_original_require require
|
45
|
+
|
46
|
+
def require(path)
|
47
|
+
rjb_original_require(path)
|
48
|
+
rescue LoadError
|
49
|
+
# check that it's not a jar file
|
50
|
+
raise unless path =~ /\.jar/
|
51
|
+
|
52
|
+
# This will maybe use the wrong jar file from a previous version of the GEM
|
53
|
+
# puts "LOAD PATH #{$LOAD_PATH}"
|
54
|
+
found_path = $LOAD_PATH.reverse.find{|p| File.exist?(File.join(p,path))}
|
55
|
+
raise unless found_path
|
56
|
+
|
57
|
+
abs_path = File.join(found_path, path)
|
58
|
+
# check that the file exists
|
59
|
+
raise unless File.exist?(abs_path)
|
60
|
+
|
61
|
+
# try to load it using RJB
|
62
|
+
@@rjb_jars ||= []
|
63
|
+
@@rjb_jars << abs_path unless @@rjb_jars.include?(abs_path)
|
64
|
+
# TODO
|
65
|
+
end
|
66
|
+
|
67
|
+
@@jvm_loaded = false
|
68
|
+
|
69
|
+
def load_jvm(jargs = [])
|
70
|
+
# avoid starting the JVM twice
|
71
|
+
return if @@jvm_loaded
|
72
|
+
|
73
|
+
@@jvm_loaded = true
|
74
|
+
classpath = ENV['CLASSPATH'] ||= ''
|
75
|
+
@@rjb_jars.each do |jar|
|
76
|
+
classpath += File::PATH_SEPARATOR unless classpath.empty?
|
77
|
+
classpath += jar
|
78
|
+
end
|
79
|
+
Rjb::load(classpath, jargs)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class JavaPackage
|
84
|
+
|
85
|
+
def initialize(pack_name, parent_pack = nil)
|
86
|
+
@pack_name = pack_name
|
87
|
+
@parent_pack = parent_pack
|
88
|
+
@cache = {}
|
89
|
+
end
|
90
|
+
|
91
|
+
def method_missing(m, *args)
|
92
|
+
# return if possible old module/class
|
93
|
+
@cache[m] ||= create_package_or_class(m)
|
94
|
+
end
|
95
|
+
def create_package_or_class(m)
|
96
|
+
method = m.to_s
|
97
|
+
if class?(method)
|
98
|
+
Rjb::import("#{self}.#{method}")
|
99
|
+
else
|
100
|
+
JavaPackage.new(method, self)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def to_s
|
105
|
+
if @parent_pack
|
106
|
+
"#{@parent_pack.to_s}.#@pack_name"
|
107
|
+
else
|
108
|
+
"#@pack_name"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def class?(a)
|
113
|
+
first_letter = a[0,1]
|
114
|
+
first_letter >= 'A' && first_letter <= 'Z'
|
115
|
+
end
|
116
|
+
|
117
|
+
@@cache = {}
|
118
|
+
def self.new(pack_name, parent_pack = nil)
|
119
|
+
@@cache[pack_name] ||= super
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
module RjbConf
|
124
|
+
# make them as singleton
|
125
|
+
ORG = JavaPackage.new('org')
|
126
|
+
JAVA = JavaPackage.new('java')
|
127
|
+
end
|
128
|
+
|
129
|
+
def org
|
130
|
+
RjbConf::ORG
|
131
|
+
end
|
132
|
+
|
133
|
+
def java
|
134
|
+
RjbConf::JAVA
|
135
|
+
end
|
data/test/exttest.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/local/env ruby -Ku
|
2
|
+
# encoding: utf-8
|
3
|
+
# $Id:$
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'rjb'
|
7
|
+
rescue LoadError
|
8
|
+
require 'rubygems'
|
9
|
+
require 'rjb'
|
10
|
+
end
|
11
|
+
|
12
|
+
if Rjb::VERSION < '1.2.2'
|
13
|
+
puts "Rjb #{Rjb::VERSION} does not support rjbextension. exit"
|
14
|
+
exit 0
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'rjbextension'
|
18
|
+
require 'test/unit'
|
19
|
+
|
20
|
+
puts "start RJB(#{Rjb::VERSION}) test"
|
21
|
+
class ExtTestRjb < Test::Unit::TestCase
|
22
|
+
|
23
|
+
def jp
|
24
|
+
JavaPackage.new('jp')
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_require_extension
|
28
|
+
require 'rjbtest.jar'
|
29
|
+
load_jvm
|
30
|
+
|
31
|
+
base = jp.co.infoseek.hp.arton.rjb.Base.new
|
32
|
+
assert_equal('hello', base.instance_var)
|
33
|
+
end
|
34
|
+
end
|
data/test/m.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
puts RUBY_VERSION
|
2
|
+
class X
|
3
|
+
module Y
|
4
|
+
def hello
|
5
|
+
puts 'hello'
|
6
|
+
end
|
7
|
+
end
|
8
|
+
def make_proc(&block)
|
9
|
+
block
|
10
|
+
end
|
11
|
+
def test
|
12
|
+
Proc.new do
|
13
|
+
extend Y
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
x = X.new
|
18
|
+
a = Object.new
|
19
|
+
a.instance_eval &x.test
|
20
|
+
a.hello
|
data/test/rjbtest.jar
ADDED
Binary file
|
data/test/test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/local/env ruby -Ku
|
2
2
|
# encoding: utf-8
|
3
|
-
# $Id: test.rb
|
3
|
+
# $Id: test.rb 133 2010-09-16 16:01:02Z arton $
|
4
4
|
|
5
5
|
begin
|
6
6
|
require 'rjb'
|
@@ -257,7 +257,7 @@ class TestRjb < Test::Unit::TestCase
|
|
257
257
|
def test_unbind()
|
258
258
|
it = TestIter.new
|
259
259
|
it = bind(it, 'java.util.Iterator')
|
260
|
-
|
260
|
+
assert_equal(it, unbind(it))
|
261
261
|
end
|
262
262
|
|
263
263
|
class TestComparator
|
@@ -274,9 +274,9 @@ class TestRjb < Test::Unit::TestCase
|
|
274
274
|
cp = bind(cp, 'java.util.Comparator')
|
275
275
|
test = import('jp.co.infoseek.hp.arton.rjb.Test')
|
276
276
|
a = test.new
|
277
|
-
|
278
|
-
|
279
|
-
|
277
|
+
assert_equal(0, a.check(cp, 123, 123))
|
278
|
+
assert_equal(5, a.check(cp, 81, 76))
|
279
|
+
assert_equal(-5, a.check(cp, 76, 81))
|
280
280
|
end
|
281
281
|
|
282
282
|
# assert_raise is useless in this test, because NumberFormatException may be defined in
|
@@ -286,6 +286,7 @@ class TestRjb < Test::Unit::TestCase
|
|
286
286
|
@jInteger.parseInt('blabla')
|
287
287
|
flunk('no exception')
|
288
288
|
rescue NumberFormatException => e
|
289
|
+
assert_nil(e.cause)
|
289
290
|
# OK
|
290
291
|
end
|
291
292
|
end
|
@@ -658,7 +659,7 @@ class TestRjb < Test::Unit::TestCase
|
|
658
659
|
end
|
659
660
|
def test_extend
|
660
661
|
@jString.class_eval do
|
661
|
-
include TestMixin
|
662
|
+
include TestRjb::TestMixin
|
662
663
|
end
|
663
664
|
s = @jString.new
|
664
665
|
assert_equal('hello world', s.test_hello('world'))
|
@@ -666,7 +667,7 @@ class TestRjb < Test::Unit::TestCase
|
|
666
667
|
def test_extend_with_factory
|
667
668
|
point = import('java.awt.Point')
|
668
669
|
point.class_eval do
|
669
|
-
include TestMixin
|
670
|
+
include TestRjb::TestMixin
|
670
671
|
end
|
671
672
|
p = point.new(11, 12)
|
672
673
|
assert_equal(11, p.x)
|
@@ -682,6 +683,10 @@ class TestRjb < Test::Unit::TestCase
|
|
682
683
|
sig = @jString.sigs('indexOf').sort
|
683
684
|
assert_equal(expected, sig)
|
684
685
|
end
|
686
|
+
def test_fetch_method_without_signature
|
687
|
+
sig =
|
688
|
+
assert_equal([nil], @jString.sigs('toString'))
|
689
|
+
end
|
685
690
|
def test_fetch_static_method_signature
|
686
691
|
expected = ['Ljava.lang.String;[Ljava.lang.Object;',
|
687
692
|
'Ljava.util.Locale;Ljava.lang.String;[Ljava.lang.Object;']
|
@@ -693,5 +698,37 @@ class TestRjb < Test::Unit::TestCase
|
|
693
698
|
sig = @jInteger.ctor_sigs.sort
|
694
699
|
assert_equal(expected, sig)
|
695
700
|
end
|
701
|
+
def test_methods_extension
|
702
|
+
m = @jString.new('').methods
|
703
|
+
assert m.include?('indexOf')
|
704
|
+
end
|
705
|
+
def test_class_methods_extension
|
706
|
+
m = @jString.methods
|
707
|
+
assert m.include?('format')
|
708
|
+
end
|
709
|
+
def test_pmethods_extension
|
710
|
+
m = @jString.new('').public_methods
|
711
|
+
assert m.include?('indexOf')
|
712
|
+
end
|
713
|
+
def test_class_pmethods_extension
|
714
|
+
m = @jString.public_methods
|
715
|
+
assert m.include?('format')
|
716
|
+
end
|
717
|
+
def test_java_methods
|
718
|
+
indexof = @jString.new('').java_methods.find do |m|
|
719
|
+
m =~ /^indexOf/
|
720
|
+
end
|
721
|
+
args = indexof.match(/\[([^\]]+)\]/)[1]
|
722
|
+
assert_equal('Ljava.lang.String;I, II, I, Ljava.lang.String;'.split(/,\s*/).sort,
|
723
|
+
args.split(/,\s*/).sort)
|
724
|
+
end
|
725
|
+
def test_java_class_methods
|
726
|
+
m = @jString.java_methods
|
727
|
+
assert m.include?('format([Ljava.lang.String;[Ljava.lang.Object;, Ljava.util.Locale;Ljava.lang.String;[Ljava.lang.Object;])')
|
728
|
+
end
|
729
|
+
def test_64fixnum
|
730
|
+
big = @jLong.new_with_sig('J', 1230918239495)
|
731
|
+
assert_equal 1230918239495, big.long_value
|
732
|
+
end
|
696
733
|
end
|
697
734
|
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rjb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 15
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 2
|
9
|
+
- 8
|
10
|
+
version: 1.2.8
|
5
11
|
platform: x86-mswin32-60
|
6
12
|
authors:
|
7
13
|
- arton
|
@@ -9,7 +15,7 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-09-17 00:00:00 +09:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
@@ -37,8 +43,11 @@ files:
|
|
37
43
|
- ext/depend
|
38
44
|
- data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
|
39
45
|
- lib/rjb.rb
|
46
|
+
- lib/rjbextension.rb
|
40
47
|
- samples/filechooser.rb
|
48
|
+
- test/exttest.rb
|
41
49
|
- test/gctest.rb
|
50
|
+
- test/m.rb
|
42
51
|
- test/test.rb
|
43
52
|
- test/tx.rb
|
44
53
|
- test/Base.class
|
@@ -52,6 +61,7 @@ files:
|
|
52
61
|
- test/JTest.class
|
53
62
|
- test/Test$TestTypes.class
|
54
63
|
- test/Test.class
|
64
|
+
- test/rjbtest.jar
|
55
65
|
- COPYING
|
56
66
|
- ChangeLog
|
57
67
|
- readme.sj
|
@@ -67,23 +77,31 @@ rdoc_options: []
|
|
67
77
|
require_paths:
|
68
78
|
- lib
|
69
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
70
81
|
requirements:
|
71
82
|
- - ">="
|
72
83
|
- !ruby/object:Gem::Version
|
84
|
+
hash: 51
|
85
|
+
segments:
|
86
|
+
- 1
|
87
|
+
- 8
|
88
|
+
- 2
|
73
89
|
version: 1.8.2
|
74
|
-
version:
|
75
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
76
92
|
requirements:
|
77
93
|
- - ">="
|
78
94
|
- !ruby/object:Gem::Version
|
95
|
+
hash: 3
|
96
|
+
segments:
|
97
|
+
- 0
|
79
98
|
version: "0"
|
80
|
-
version:
|
81
99
|
requirements:
|
82
100
|
- none
|
83
101
|
- JDK 5.0
|
84
102
|
- " VC6 version of Ruby"
|
85
103
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.3.
|
104
|
+
rubygems_version: 1.3.7
|
87
105
|
signing_key:
|
88
106
|
specification_version: 3
|
89
107
|
summary: Ruby Java bridge
|