unageanu-javaclass 0.1.1 → 0.2.0

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.
@@ -0,0 +1,33 @@
1
+
2
+ require "zip/zip"
3
+
4
+ # ZipInputStreamにはgetcが実装されていないので、追加する。
5
+ module Zip
6
+ class ZipInputStream
7
+ def getc
8
+ read(1)[0]
9
+ end
10
+ end
11
+ end
12
+
13
+ module JavaClass
14
+
15
+ #=== Zipユーティリティ
16
+ module ZipUtils
17
+ module_function
18
+
19
+ # Zipエントリ内のクラス一覧を列挙して解析する。
20
+ #*zip_file:: zipファイル
21
+ #*&block:: クラスごとに呼び出されるブロック。引数でJavaClass::Classが渡される。
22
+ def each_class ( zip_file, &block )
23
+ Zip::ZipFile.foreach(zip_file) {|entry|
24
+ next unless entry.file?
25
+ next unless entry.name =~ /.*\.class$/
26
+ entry.get_input_stream {|io|
27
+ jc = JavaClass.from io
28
+ block.call( jc ) if block_given?
29
+ }
30
+ }
31
+ end
32
+ end
33
+ end
data/lib/javaclass.rb CHANGED
@@ -1,8 +1,14 @@
1
1
 
2
+ begin
3
+ require "rubygems"
4
+ rescue LoadError
5
+ end
6
+
2
7
  require "javaclass/base"
3
8
  require "javaclass/accessflag"
4
9
  require "javaclass/attribute"
5
10
  require "javaclass/class"
6
11
  require "javaclass/constant"
7
12
  require "javaclass/member"
8
- require "javaclass/reader"
13
+ require "javaclass/reader"
14
+ require "javaclass/ziputils"
@@ -1,69 +1,104 @@
1
+ #!/usr/bin/ruby
1
2
 
3
+ # jar内のクラスファイルのassertEquals()を生成する。
4
+ #
5
+ # ./create_assert.rb <jarファイル> [<対象クラスを示す正規表現>]
6
+ #
2
7
 
3
- $: << "../lib"
4
-
8
+ require 'rubygems'
5
9
  require "javaclass"
10
+ require "zip/zip"
6
11
  require "kconv"
7
12
  require "erb"
8
13
 
9
14
 
10
- PATH = 'aaa'
11
-
12
- def create( file )
13
- erb = ERB.new(IO.read("./assert.erb"), nil, "%" )
14
- open( PATH + "/" + file, "r+b" ) {|io|
15
- jc = JavaClass.from io
16
- puts erb.result(binding).tosjis
17
- }
18
- end
19
-
20
- Dir.foreach( PATH.gsub(/\\/, "/") ) {|f|
21
- create( f ) if f =~ /\.class$/ && !( f =~ /\$[0-9]+\.class$/ )
22
- }
23
-
24
- =begin
25
- % name = jc.this_class.name
15
+ TEMPLATE = <<-ERB
16
+ % name = jc.name
26
17
  /**
27
- * {@link <%= name.gsub(/\$/, ".") %>} が同一であることを評価する。
18
+ * {@link <%= name.gsub(/\\$/, ".") %>} が同一であることを評価する。
28
19
  *
29
20
  * @param expected 期待値
30
21
  * @param actual 実際の値
31
22
  */
32
23
  public static final void assertEquals(
33
- <%= name.gsub(/\$/, ".") %> expected,
34
- <%= name.gsub(/\$/, ".") %> actual ) {
24
+ <%= name.gsub(/\\$/, ".") %> expected,
25
+ <%= name.gsub(/\\$/, ".") %> actual ) {
26
+ % if jc.super_class != nil && jc.super_class != "java.lang.Object"
27
+ % super_class = jc.super_class.gsub(/\\$/, ".")
28
+ assertEquals( (<%= super_class %>) expected, (<%= super_class %>) actual );
29
+ % end
35
30
  % jc.methods.each { |m|
36
- % if m.name =~ /^get([A-Z][0-9a-zA-Z\_]+)/ || m.name =~ /^is([A-Z][0-9a-zA-Z\_])+/
31
+ % next if m.deprecated?
32
+ % next if m.access_flag.on? JavaClass::MethodAccessFlag::ACC_STATIC
33
+ % next if m.access_flag.on? JavaClass::MethodAccessFlag::ACC_PRIVATE
34
+ % if m.name =~ /^get(\\S+)/ || m.name =~ /^is(\\S)+/
37
35
  % sname = $1
38
- % prefix = m.attributes.key?('Deprecated') ? "//" : ""
39
- % d = m.convert_method_descriptor( m.descriptor )
36
+ % d = JavaClass::Converters.convert_method_descriptor( m.descriptor )
40
37
  % next if d[:args].length > 0
41
- % if d[:return] =~ /List/
42
- <%= prefix %> <%= d[:return] %> actual<%= sname%> = actual.<%= m.name %>();
43
- <%= prefix %> <%= d[:return] %> expected<%= sname%> = expected.<%= m.name %>();
44
- <%= prefix %> if ( expected<%= sname%> != null ) {
45
- <%= prefix %> assertEquals( actual<%= sname%>.size(), expected<%= sname%>.size() );
46
- <%= prefix %> for ( int i = 0; i < expected<%= sname%>.size(); i++ ) {
47
- <%= prefix %> assertEquals( expected<%= sname%>.get(i), actual<%= sname%>.get(i) );
48
- <%= prefix %> }
49
- <%= prefix %> } else {
50
- <%= prefix %> assertEquals( actual<%= sname%>, expected<%= sname%> );
51
- <%= prefix %> }
52
- % elsif d[:return] =~ /.*\[\]/
53
- <%= prefix %> <%= d[:return] %> actual<%= sname%> = actual.<%= m.name %>();
54
- <%= prefix %> <%= d[:return] %> expected<%= sname%> = expected.<%= m.name %>();
55
- <%= prefix %> if ( expected<%= sname%> != null ) {
56
- <%= prefix %> assertEquals( actual<%= sname%>.length, expected<%= sname%>.length );
57
- <%= prefix %> for ( int i = 0; i < expected<%= sname%>.length; i++ ) {
58
- <%= prefix %> assertEquals( expected<%= sname%>[i], actual<%= sname%>[i] );
59
- <%= prefix %> }
60
- <%= prefix %> } else {
61
- <%= prefix %> assertEquals( actual<%= sname%>, expected<%= sname%> );
62
- <%= prefix %> }
38
+ % if d[:return] =~ /List$/ || d[:return] =~ /.*\\[\\]/ || d[:return] =~ /Map$/
39
+ <%= d[:return] %> expected<%= sname%> = expected.<%= m.name %>();
40
+ <%= d[:return] %> actual<%= sname%> = actual.<%= m.name %>();
41
+ if ( expected<%= sname%> != null ) {
42
+ % if d[:return] =~ /List$/
43
+ assertEquals( expected<%= sname%>.size(), actual<%= sname%>.size() );
44
+ for ( int i = 0; i < expected<%= sname%>.size(); i++ ) {
45
+ assertEquals( expected<%= sname%>.get(i), actual<%= sname%>.get(i) );
46
+ }
47
+ % elsif d[:return] =~ /.*\\[\\]/
48
+ assertEquals( expected<%= sname%>.length, actual<%= sname%>.length );
49
+ for ( int i = 0; i < expected<%= sname%>.length; i++ ) {
50
+ assertEquals( expected<%= sname%>[i], actual<%= sname%>[i] );
51
+ }
52
+ % else
53
+ assertEquals( expected<%= sname%>.size(), actual<%= sname%>.size() );
54
+ for ( Object key : expected<%= sname%>.keySet() ) {
55
+ assertEquals( expected<%= sname%>.get(key), actual<%= sname%>.get(key) );
56
+ }
57
+ % end
58
+ } else {
59
+ assertEquals( expected<%= sname%>, actual<%= sname%> );
60
+ }
63
61
  % else
64
- <%= prefix %> assertEquals( expected.<%= m.name %>(), actual.<%= m.name %>() );
62
+ assertEquals( expected.<%= m.name %>(), actual.<%= m.name %>() );
65
63
  % end
66
64
  % end
67
65
  % }
68
66
  }
69
- =end
67
+ ERB
68
+
69
+ # ZipInputStreamにはgetcが実装されていないので、追加する。
70
+ module Zip
71
+ class ZipInputStream
72
+ def getc
73
+ read(1)[0]
74
+ end
75
+ end
76
+ end
77
+
78
+ # Zipエントリ内のクラス一覧を列挙して解析する。
79
+ def each_class ( zip_file, &block )
80
+ Zip::ZipFile.foreach(zip_file) {|entry|
81
+ next unless entry.file?
82
+ next unless entry.name =~ /.*\.class$/
83
+ entry.get_input_stream {|io|
84
+ jc = JavaClass.from io
85
+ block.call( jc ) if block_given?
86
+ }
87
+ }
88
+ end
89
+
90
+ erb = ERB.new(TEMPLATE, nil, "%" )
91
+ r = Regexp.compile(ARGV[1]) if ( ARGV.length > 1 )
92
+
93
+ each_class( ARGV[0] ) {|jc|
94
+
95
+ next if r != nil && !r.match(jc.name)
96
+
97
+ # enum, annotationは除外
98
+ next if jc.access_flag.on? JavaClass::ClassAccessFlag::ACC_ENUM
99
+ next if jc.access_flag.on? JavaClass::ClassAccessFlag::ACC_ANNOTATION
100
+
101
+ # deprecatedなクラスも除外
102
+ next if jc.deprecated?
103
+ puts erb.result(binding).tosjis
104
+ }
data/sample/sample.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- #require "rubygems"
2
+ require "rubygems"
3
3
  require "javaclass"
4
4
  require "kconv"
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unageanu-javaclass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaya Yamauchi
@@ -9,10 +9,18 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-13 00:00:00 -07:00
12
+ date: 2008-06-25 00:00:00 -07:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rubyzip
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.9.1
23
+ version:
16
24
  description:
17
25
  email: y-masaya@red.hot.co.jp
18
26
  executables: []
@@ -39,7 +47,6 @@ files:
39
47
  - test/test_class.rb
40
48
  - test/test_attribute.rb
41
49
  - test/test_constant.rb
42
- - test/all-tests.rb
43
50
  - lib/javaclass.rb
44
51
  - lib/javaclass
45
52
  - lib/javaclass/accessflag.rb
@@ -48,6 +55,7 @@ files:
48
55
  - lib/javaclass/base.rb
49
56
  - lib/javaclass/member.rb
50
57
  - lib/javaclass/class.rb
58
+ - lib/javaclass/ziputils.rb
51
59
  - lib/javaclass/reader.rb
52
60
  - sample/sample.rb
53
61
  - sample/java_class
@@ -64,7 +72,6 @@ files:
64
72
  - sample/java_class/com/example/ThrowsException.class
65
73
  - sample/java_class/com/example/Constants.class
66
74
  - sample/java_class/com/example/Deprecated.class
67
- - sample/java_class/com/example/Kitten.class
68
75
  - sample/java_class/com/example/InnerClassImpl$1.class
69
76
  - sample/java_class/com/example/InnerClassImpl$2.class
70
77
  - sample/java_class/com/example/annotation
@@ -85,7 +92,6 @@ files:
85
92
  - sample/java_class/com/example/InnerClassImpl$BasicInnerClass2.class
86
93
  - sample/java_class/HelloWorld.class
87
94
  - sample/type_hierarchy.rb
88
- - sample/class_list.rb
89
95
  - sample/java_src
90
96
  - sample/java_src/com
91
97
  - sample/java_src/com/example
@@ -133,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
139
  requirements: []
134
140
 
135
141
  rubyforge_project:
136
- rubygems_version: 1.0.1
142
+ rubygems_version: 1.2.0
137
143
  signing_key:
138
144
  specification_version: 2
139
145
  summary: javaclass is a java class file parser for ruby.
@@ -155,4 +161,3 @@ test_files:
155
161
  - test/test_class.rb
156
162
  - test/test_attribute.rb
157
163
  - test/test_constant.rb
158
- - test/all-tests.rb
data/sample/class_list.rb DELETED
@@ -1,52 +0,0 @@
1
-
2
- require "rubygems"
3
- require "javaclass"
4
- require "zip/zip"
5
-
6
- # ZipInputStreamにはgetcが実装されていないので、追加する。
7
- module Zip
8
- class ZipInputStream
9
- def getc
10
- read(1)[0]
11
- end
12
- end
13
- end
14
-
15
- # Zipエントリ内のクラス一覧を列挙して解析する。
16
- def each_class ( zip_file, &block )
17
- Zip::ZipFile.foreach(ARGV[0]) {|entry|
18
- next unless entry.file?
19
- next unless entry.name =~ /.*\.class$/
20
- entry.get_input_stream {|io|
21
- jc = JavaClass.from io
22
- block.call( jc ) if block_given?
23
- }
24
- }
25
- end
26
-
27
- class TypeHierarchy
28
- def initialize
29
- @classes = {}
30
- end
31
- def add( jc )
32
- (jc.interfaces << jc.super_class).each {
33
- if ( super_class != "java.lang.Object" )
34
- @classes[super_class] = Type.new unless @classes.key? super_class
35
-
36
- end
37
- }
38
-
39
- end
40
- def to_s
41
-
42
- end
43
- end
44
-
45
- class Type
46
- def initialize( java_class=nil )
47
- @implementors = []
48
- @java_class = java_class
49
- end
50
- attr :java_class, true
51
- attr :implementors, true
52
- end
data/test/all-tests.rb DELETED
@@ -1,32 +0,0 @@
1
-
2
- $: << "../src"
3
-
4
- require 'test/unit/testsuite'
5
- require 'access-flag-test'
6
- require 'attribute-test'
7
- require 'constant-test'
8
- require 'member-test'
9
-
10
- module JavaClass
11
-
12
- class AllTests
13
- def self.suite
14
- suite = Test::Unit::TestSuite.new( "javaclass all tests." )
15
- suite << AccessFlagTest.suite
16
- suite << AttributeTest.suite
17
- suite << AttributeTest.suite
18
- suite << UTF8ConstantTest
19
- suite << IntegerConstantTest
20
- suite << LongConstantTest.suite
21
- suite << FloatConstantTest.suite
22
- suite << DoubleConstantTest.suite
23
- suite << StringConstantTest.suite
24
- suite << NameAndTypeConstantTest.suite
25
- suite << ClassConstantTest.suite
26
- suite << MemberRefConstantTest.suite
27
- suite << MemberTest.suite
28
- return suite
29
- end
30
- end
31
-
32
- end