rjb 1.5.8 → 1.6.3
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.
- checksums.yaml +4 -4
- data/ChangeLog +37 -0
- data/README.md +65 -0
- data/data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class +0 -0
- data/ext/{depend → depend.erb} +1 -1
- data/ext/extconf.h +1 -1
- data/ext/extconf.rb +19 -0
- data/ext/load.c +38 -14
- data/ext/riconv.c +142 -11
- data/ext/rjb.c +74 -74
- data/ext/rjbexception.c +24 -3
- data/lib/rjb.rb +21 -2
- data/test/test.rb +37 -9
- metadata +13 -16
data/ext/rjbexception.c
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
static VALUE missing_delegate(int argc, VALUE* argv, VALUE self)
|
30
30
|
{
|
31
31
|
ID rmid = rb_to_id(argv[0]);
|
32
|
-
return
|
32
|
+
return rb_funcallv(rb_ivar_get(self, rb_intern("@cause")), rmid, argc - 1, argv + 1);
|
33
33
|
}
|
34
34
|
|
35
35
|
static VALUE get_cause(VALUE self)
|
@@ -37,6 +37,26 @@ static VALUE get_cause(VALUE self)
|
|
37
37
|
return rb_funcall(rb_ivar_get(self, rb_intern("@cause")), rb_intern("cause"), 0);
|
38
38
|
}
|
39
39
|
|
40
|
+
static VALUE ex_respond_to(int argc, VALUE* argv, VALUE self)
|
41
|
+
{
|
42
|
+
if (argc < 1 || argc > 2)
|
43
|
+
{
|
44
|
+
rb_raise(rb_eArgError, "respond_to? require 1 or 2 arguments");
|
45
|
+
}
|
46
|
+
if (rb_to_id(argv[0]) == rb_intern("to_str"))
|
47
|
+
{
|
48
|
+
return Qfalse;
|
49
|
+
}
|
50
|
+
else if (rb_to_id(argv[0]) == rb_intern("exception"))
|
51
|
+
{
|
52
|
+
return Qtrue;
|
53
|
+
}
|
54
|
+
else
|
55
|
+
{
|
56
|
+
return rb_funcallv(rb_ivar_get(self, rb_intern("@cause")), rb_intern("respond_to?"), argc, argv);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
40
60
|
/*
|
41
61
|
* handle Java exception
|
42
62
|
* At this time, the Java exception is defined without the package name.
|
@@ -67,6 +87,7 @@ VALUE rjb_get_exception_class(JNIEnv* jenv, jstring str)
|
|
67
87
|
rexp = rb_define_class(pcls, rb_eStandardError);
|
68
88
|
rb_define_method(rexp, "cause", get_cause, 0);
|
69
89
|
rb_define_method(rexp, "method_missing", missing_delegate, -1);
|
90
|
+
rb_define_method(rexp, "respond_to?", ex_respond_to, -1);
|
70
91
|
#if defined(HAVE_RB_HASH_ASET) || defined(RUBINIUS)
|
71
92
|
rb_hash_aset(rjb_loaded_classes, cname, rexp);
|
72
93
|
#else
|
@@ -76,7 +97,7 @@ VALUE rjb_get_exception_class(JNIEnv* jenv, jstring str)
|
|
76
97
|
st_insert(RHASH(rjb_loaded_classes)->tbl, cname, rexp);
|
77
98
|
#endif
|
78
99
|
#endif
|
79
|
-
|
100
|
+
|
80
101
|
}
|
81
102
|
return rexp;
|
82
103
|
}
|
@@ -88,7 +109,7 @@ VALUE rjb_s_throw(int argc, VALUE* argv, VALUE self)
|
|
88
109
|
{
|
89
110
|
VALUE klass;
|
90
111
|
VALUE message;
|
91
|
-
JNIEnv* jenv = NULL;
|
112
|
+
JNIEnv* jenv = NULL;
|
92
113
|
|
93
114
|
rjb_load_vm_default();
|
94
115
|
|
data/lib/rjb.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
=begin
|
2
|
-
Copyright(c) 2006-2010,2012 arton
|
2
|
+
Copyright(c) 2006-2010,2012,2020 arton
|
3
3
|
=end
|
4
4
|
|
5
5
|
require 'rbconfig'
|
@@ -86,7 +86,7 @@ module Rjb
|
|
86
86
|
(org + klass.getMethods.select do |m|
|
87
87
|
blk.call(m)
|
88
88
|
end.map do |m|
|
89
|
-
m.name
|
89
|
+
m.name.to_sym
|
90
90
|
end).uniq
|
91
91
|
end
|
92
92
|
def format_sigs(s)
|
@@ -98,6 +98,19 @@ module Rjb
|
|
98
98
|
"[#{s.map{|m|m.nil? ? 'void' : m}.join(', ')}]"
|
99
99
|
end
|
100
100
|
end
|
101
|
+
def make_snake(nm)
|
102
|
+
nm.gsub(/(.)([A-Z])/) { "#{$1}_#{$2.downcase}" }
|
103
|
+
end
|
104
|
+
alias :rjb_org_respond_to? :respond_to?
|
105
|
+
def rjb_respond_to?(sym, klass, priv)
|
106
|
+
return true if (klass ? self : getClass).getMethods.select do |m|
|
107
|
+
(klass && !instance_method?(m) && (priv || public_method?(m))) ||
|
108
|
+
(!klass && instance_method?(m) && (priv || public_method?(m)))
|
109
|
+
end.map do |m|
|
110
|
+
[m.name.to_sym, make_snake(m.name).to_sym]
|
111
|
+
end.flatten.include?(sym.to_sym)
|
112
|
+
rjb_org_respond_to?(sym, priv)
|
113
|
+
end
|
101
114
|
end
|
102
115
|
|
103
116
|
class Rjb_JavaClass
|
@@ -119,6 +132,9 @@ module Rjb
|
|
119
132
|
"#{m}(#{format_sigs(self.static_sigs(m))})"
|
120
133
|
end
|
121
134
|
end
|
135
|
+
def respond_to?(sym, priv = false)
|
136
|
+
rjb_respond_to?(sym, true, priv)
|
137
|
+
end
|
122
138
|
end
|
123
139
|
class Rjb_JavaProxy
|
124
140
|
include JMethod
|
@@ -141,6 +157,9 @@ module Rjb
|
|
141
157
|
"#{m}(#{format_sigs(getClass.sigs(m))})"
|
142
158
|
end
|
143
159
|
end
|
160
|
+
def respond_to?(sym, priv = false)
|
161
|
+
rjb_respond_to?(sym, false, priv)
|
162
|
+
end
|
144
163
|
end
|
145
164
|
class Rjb_JavaBridge
|
146
165
|
def method_missing(name, *args)
|
data/test/test.rb
CHANGED
@@ -216,17 +216,28 @@ class TestRjb < Test::Unit::TestCase
|
|
216
216
|
end
|
217
217
|
|
218
218
|
def test_combination_charcters
|
219
|
-
teststr = "\xc7\x96\xc3\xbc\xcc\x84\x75\xcc\x88\xcc\x84
|
219
|
+
teststr = "\xc7\x96\xc3\xbc\xcc\x84\x75\xcc\x88\xcc\x84𪚲\xe3\x81\x8b\xe3\x82\x9a"
|
220
220
|
test = import('jp.co.infoseek.hp.arton.rjb.Test').new
|
221
221
|
s = test.getUmlaut()
|
222
222
|
if Object::const_defined?(:Encoding) #>=1.9
|
223
|
-
|
224
|
-
|
223
|
+
=begin
|
224
|
+
n = [teststr.bytes.length, s.bytes.length].max
|
225
|
+
puts "org:#{teststr.bytes.length}, ret:#{s.bytes.length}"
|
226
|
+
0.upto(n - 1) do |i|
|
227
|
+
b0 = teststr.getbyte(i)
|
228
|
+
b0 = 0 unless b0
|
229
|
+
b1 = s.getbyte(i)
|
230
|
+
b1 = 0 unless b1
|
231
|
+
puts sprintf("%02X - %02X\n", b0, b1)
|
232
|
+
end
|
233
|
+
=end
|
234
|
+
assert_equal(teststr.bytes.length, s.bytes.length)
|
235
|
+
assert_equal(teststr, s)
|
225
236
|
else
|
226
237
|
default_kcode = $KCODE
|
227
238
|
begin
|
228
239
|
$KCODE = "utf8"
|
229
|
-
assert_equal(
|
240
|
+
assert_equal(teststr, s)
|
230
241
|
ensure
|
231
242
|
$KCODE = default_kcode
|
232
243
|
end
|
@@ -715,19 +726,19 @@ class TestRjb < Test::Unit::TestCase
|
|
715
726
|
end
|
716
727
|
def test_methods_extension
|
717
728
|
m = @jString.new('').methods
|
718
|
-
assert m.include?(
|
729
|
+
assert m.include?(:indexOf)
|
719
730
|
end
|
720
731
|
def test_class_methods_extension
|
721
732
|
m = @jString.methods
|
722
|
-
assert m.include?(
|
733
|
+
assert m.include?(:format)
|
723
734
|
end
|
724
735
|
def test_pmethods_extension
|
725
736
|
m = @jString.new('').public_methods
|
726
|
-
assert m.include?(
|
737
|
+
assert m.include?(:indexOf)
|
727
738
|
end
|
728
739
|
def test_class_pmethods_extension
|
729
740
|
m = @jString.public_methods
|
730
|
-
assert m.include?(
|
741
|
+
assert m.include?(:format)
|
731
742
|
end
|
732
743
|
def test_java_methods
|
733
744
|
indexof = @jString.new('').java_methods.find do |m|
|
@@ -947,5 +958,22 @@ class TestRjb < Test::Unit::TestCase
|
|
947
958
|
end
|
948
959
|
end
|
949
960
|
end
|
950
|
-
end
|
951
961
|
|
962
|
+
def test_java_utf8
|
963
|
+
y = @jString.new('𠮷野家')
|
964
|
+
assert_equal '𠮷野家', y.toString
|
965
|
+
end
|
966
|
+
|
967
|
+
def test_respond_to
|
968
|
+
str = @jString.new('blabla')
|
969
|
+
assert str.respond_to? :substring
|
970
|
+
assert_false str.respond_to? :unknown_method
|
971
|
+
begin
|
972
|
+
@jInteger.parseInt('blabla')
|
973
|
+
rescue => e
|
974
|
+
assert e.respond_to? :print_stack_trace
|
975
|
+
assert e.respond_to? :printStackTrace
|
976
|
+
assert_false e.respond_to? :unknown_method
|
977
|
+
end
|
978
|
+
end
|
979
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rjb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- arton
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
13
|
+
description: RJB is a Bridge library which connects Ruby and Java code using the Java
|
14
14
|
Native Interface.
|
15
|
-
|
16
|
-
'
|
17
15
|
email: artonx@gmail.com
|
18
16
|
executables: []
|
19
17
|
extensions:
|
@@ -22,9 +20,10 @@ extra_rdoc_files: []
|
|
22
20
|
files:
|
23
21
|
- COPYING
|
24
22
|
- ChangeLog
|
23
|
+
- README.md
|
25
24
|
- data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
|
26
25
|
- ext/RBridge.java
|
27
|
-
- ext/depend
|
26
|
+
- ext/depend.erb
|
28
27
|
- ext/extconf.h
|
29
28
|
- ext/extconf.rb
|
30
29
|
- ext/jniwrap.h
|
@@ -72,11 +71,11 @@ files:
|
|
72
71
|
- test/test_osxload.rb
|
73
72
|
- test/test_unload.rb
|
74
73
|
- test/x.rb
|
75
|
-
homepage:
|
74
|
+
homepage: http://www.artonx.org/collabo/backyard/?RubyJavaBridge
|
76
75
|
licenses:
|
77
|
-
- LGPL
|
76
|
+
- LGPL-2.1-or-later
|
78
77
|
metadata: {}
|
79
|
-
post_install_message:
|
78
|
+
post_install_message:
|
80
79
|
rdoc_options: []
|
81
80
|
require_paths:
|
82
81
|
- lib
|
@@ -91,11 +90,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
90
|
- !ruby/object:Gem::Version
|
92
91
|
version: '0'
|
93
92
|
requirements:
|
94
|
-
- none
|
95
93
|
- JDK 5.0
|
96
|
-
rubygems_version: 3.
|
97
|
-
signing_key:
|
94
|
+
rubygems_version: 3.2.3
|
95
|
+
signing_key:
|
98
96
|
specification_version: 4
|
99
|
-
summary: Ruby Java
|
100
|
-
test_files:
|
101
|
-
- test/test.rb
|
97
|
+
summary: Ruby Java Bridge
|
98
|
+
test_files: []
|