rjb 1.2.6 → 1.2.8

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 CHANGED
@@ -1,3 +1,19 @@
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
1
17
  Thu Jul 22 arton
2
18
  *ext/rjb.c
3
19
  RJB_VERSION -> 1.2.6
data/ext/extconf.h CHANGED
@@ -1,9 +1,9 @@
1
1
  #ifndef EXTCONF_H
2
2
  #define EXTCONF_H
3
3
  #define HAVE_JNI_H 1
4
- #define HAVE_RUBY_DL_H 1
4
+ #define HAVE_DL_H 1
5
5
  #define HAVE_NL_LANGINFO 1
6
6
  #define HAVE_SETLOCALE 1
7
7
  #define HAVE_GETENV 1
8
- #define RJB_RUBY_VERSION_CODE 191
8
+ #define RJB_RUBY_VERSION_CODE 187
9
9
  #endif
@@ -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/rjb.c CHANGED
@@ -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 126 2010-07-22 13:58:15Z arton $
15
+ * $Id: rjb.c 131 2010-09-16 15:53:33Z arton $
16
16
  */
17
17
 
18
- #define RJB_VERSION "1.2.6"
18
+ #define RJB_VERSION "1.2.8"
19
19
 
20
20
  #include "ruby.h"
21
21
  #include "extconf.h"
@@ -56,10 +56,10 @@
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(name, obj)
59
+ #define CLASS_NEW(obj, name) rb_define_class_under(rjb, name, obj)
60
60
  #define CLASS_INHERITED(spr, kls) rb_funcall(spr, rb_intern("inherited"), 1, kls)
61
61
  #else
62
- #define CLASS_NEW(obj, name) rb_class_new(obj)
62
+ #define CLASS_NEW(obj, name) rb_define_class_under(rjb, name, obj)
63
63
  #define CLASS_INHERITED(spr, kls) rb_class_inherited(spr, kls)
64
64
  #endif
65
65
  #define IS_RJB_OBJECT(v) (CLASS_INHERITED(rjbi, rb_obj_class(v)) || rb_obj_class(v) == rjb)
@@ -659,7 +659,7 @@ static void rv2jlong(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int
659
659
  switch (TYPE(val))
660
660
  {
661
661
  case T_FIXNUM:
662
- jv->j = NUM2INT(val);
662
+ jv->j = FIX2LONG(val);
663
663
  break;
664
664
  default:
665
665
  #if HAVE_LONG_LONG
@@ -672,8 +672,17 @@ static void rv2jlong(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int
672
672
  }
673
673
  static void rv2jshort(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int release)
674
674
  {
675
- if (!release)
676
- jv->s = (short)NUM2INT(val);
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");
677
686
  }
678
687
  static void rv2jboolean(JNIEnv* jenv, VALUE val, jvalue* jv, const char* psig, int release)
679
688
  {
@@ -2181,7 +2190,11 @@ static VALUE get_signatures(VALUE mname, st_table* st)
2181
2190
  ret = rb_ary_new();
2182
2191
  for (; pm; pm = pm->next)
2183
2192
  {
2184
- rb_ary_push(ret, rb_str_new2(pm->basic.method_signature));
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
+ }
2185
2198
  }
2186
2199
  return ret;
2187
2200
  }
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/test/test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/local/env ruby -Ku
2
2
  # encoding: utf-8
3
- # $Id: test.rb 126 2010-07-22 13:58:15Z arton $
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
- assert(it, unbind(it))
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
- assert(0, a.check(cp, 123, 123))
278
- assert(5, a.check(cp, 81, 76))
279
- assert(-5, a.check(cp, 76, 81))
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
@@ -683,6 +683,10 @@ class TestRjb < Test::Unit::TestCase
683
683
  sig = @jString.sigs('indexOf').sort
684
684
  assert_equal(expected, sig)
685
685
  end
686
+ def test_fetch_method_without_signature
687
+ sig =
688
+ assert_equal([nil], @jString.sigs('toString'))
689
+ end
686
690
  def test_fetch_static_method_signature
687
691
  expected = ['Ljava.lang.String;[Ljava.lang.Object;',
688
692
  'Ljava.util.Locale;Ljava.lang.String;[Ljava.lang.Object;']
@@ -694,5 +698,37 @@ class TestRjb < Test::Unit::TestCase
694
698
  sig = @jInteger.ctor_sigs.sort
695
699
  assert_equal(expected, sig)
696
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
697
733
  end
698
734
 
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rjb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 2
9
- - 6
10
- version: 1.2.6
4
+ version: 1.2.8
11
5
  platform: ruby
12
6
  authors:
13
7
  - arton
@@ -15,7 +9,7 @@ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
11
 
18
- date: 2010-07-22 00:00:00 +09:00
12
+ date: 2010-09-17 00:00:00 +09:00
19
13
  default_executable:
20
14
  dependencies: []
21
15
 
@@ -32,33 +26,32 @@ extra_rdoc_files: []
32
26
  files:
33
27
  - ext/RBridge.java
34
28
  - ext/load.c
29
+ - ext/rjbexception.c
35
30
  - ext/riconv.c
36
31
  - ext/rjb.c
37
- - ext/rjbexception.c
38
- - ext/extconf.h
39
- - ext/jniwrap.h
40
32
  - ext/jp_co_infoseek_hp_arton_rjb_RBridge.h
41
33
  - ext/riconv.h
34
+ - ext/extconf.h
35
+ - ext/jniwrap.h
42
36
  - ext/rjb.h
43
37
  - ext/depend
44
38
  - data/rjb/jp/co/infoseek/hp/arton/rjb/RBridge.class
45
39
  - lib/rjb.rb
46
40
  - lib/rjbextension.rb
47
41
  - samples/filechooser.rb
42
+ - test/test.rb
48
43
  - test/exttest.rb
49
44
  - test/gctest.rb
50
- - test/test.rb
51
45
  - test/jp/co/infoseek/hp/arton/rjb/Base.class
52
- - test/jp/co/infoseek/hp/arton/rjb/ExtBase.class
53
46
  - test/jp/co/infoseek/hp/arton/rjb/IBase.class
54
- - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
55
47
  - test/jp/co/infoseek/hp/arton/rjb/Test.class
48
+ - test/jp/co/infoseek/hp/arton/rjb/Test$TestTypes.class
49
+ - test/jp/co/infoseek/hp/arton/rjb/ExtBase.class
56
50
  - test/rjbtest.jar
57
51
  - COPYING
58
52
  - ChangeLog
59
53
  - readme.sj
60
54
  - readme.txt
61
- - ext/extconf.rb
62
55
  has_rdoc: true
63
56
  homepage: http://rjb.rubyforge.org/
64
57
  licenses: []
@@ -69,30 +62,22 @@ rdoc_options: []
69
62
  require_paths:
70
63
  - lib
71
64
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
65
  requirements:
74
66
  - - ">="
75
67
  - !ruby/object:Gem::Version
76
- hash: 51
77
- segments:
78
- - 1
79
- - 8
80
- - 2
81
68
  version: 1.8.2
69
+ version:
82
70
  required_rubygems_version: !ruby/object:Gem::Requirement
83
- none: false
84
71
  requirements:
85
72
  - - ">="
86
73
  - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
74
  version: "0"
75
+ version:
91
76
  requirements:
92
77
  - none
93
78
  - JDK 5.0
94
79
  rubyforge_project:
95
- rubygems_version: 1.3.7
80
+ rubygems_version: 1.3.5
96
81
  signing_key:
97
82
  specification_version: 3
98
83
  summary: Ruby Java bridge