javaclass 0.0.2 → 0.0.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.
Files changed (111) hide show
  1. data/Rakefile +208 -23
  2. data/Readme.txt +56 -19
  3. data/examples/generate_class_lists.rb +61 -0
  4. data/history.txt +13 -19
  5. data/lib/javaclass/classfile/access_flags.rb +52 -0
  6. data/lib/javaclass/classfile/class_magic.rb +29 -0
  7. data/lib/javaclass/classfile/class_version.rb +67 -0
  8. data/lib/javaclass/classfile/constant_pool.rb +91 -0
  9. data/lib/javaclass/classfile/constants/base.rb +33 -0
  10. data/lib/javaclass/classfile/constants/double_reference.rb +99 -0
  11. data/lib/javaclass/classfile/constants/single_reference.rb +65 -0
  12. data/lib/javaclass/classfile/constants/value.rb +116 -0
  13. data/lib/javaclass/classfile/java_class_header.rb +102 -0
  14. data/lib/javaclass/classfile/references.rb +43 -0
  15. data/lib/javaclass/classlist/class_entry.rb +89 -0
  16. data/lib/javaclass/classlist/jar_searcher.rb +69 -0
  17. data/lib/javaclass/classlist/list.rb +126 -0
  18. data/lib/javaclass/classlist/package_entry.rb +87 -0
  19. data/lib/javaclass/classpath/classpaths.txt +2 -0
  20. data/lib/javaclass/classpath/composite_classpath.rb +99 -0
  21. data/lib/javaclass/classpath/folder_classpath.rb +83 -0
  22. data/lib/javaclass/classpath/jar_classpath.rb +100 -0
  23. data/lib/javaclass/classpath/java_home_classpath.rb +40 -0
  24. data/lib/javaclass/classpath/port_ClassPathEntry.java +202 -0
  25. data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +311 -0
  26. data/lib/javaclass/classpath/port_DirectoryRepository.java +24 -0
  27. data/lib/javaclass/java_name.rb +90 -0
  28. data/lib/javaclass/metric/ccd.rb +68 -0
  29. data/lib/javaclass/metric/class_usage.rb +41 -0
  30. data/lib/javaclass/metric/metrics.txt +15 -0
  31. data/lib/javaclass.rb +44 -11
  32. data/test/data/ShortClientData$1-4000Wert.class +0 -0
  33. data/test/data/{AccessFlagsTestAbstract.class → access_flags/AccessFlagsTestAbstract.class} +0 -0
  34. data/test/data/{AccessFlagsTestAbstract.java → access_flags/AccessFlagsTestAbstract.java} +0 -0
  35. data/test/data/{AccessFlagsTestFinal.class → access_flags/AccessFlagsTestFinal.class} +0 -0
  36. data/test/data/{AccessFlagsTestFinal.java → access_flags/AccessFlagsTestFinal.java} +0 -0
  37. data/test/data/{AccessFlagsTestInterface.class → access_flags/AccessFlagsTestInterface.class} +0 -0
  38. data/test/data/{AccessFlagsTestInterface.java → access_flags/AccessFlagsTestInterface.java} +0 -0
  39. data/test/data/{AccessFlagsTestPackage.class → access_flags/AccessFlagsTestPackage.class} +0 -0
  40. data/test/data/{AccessFlagsTestPackage.java → access_flags/AccessFlagsTestPackage.java} +0 -0
  41. data/test/data/access_flags/AccessFlagsTestPublic$Inner.class +0 -0
  42. data/test/data/access_flags/AccessFlagsTestPublic$InnerInterface.class +0 -0
  43. data/test/data/access_flags/AccessFlagsTestPublic$StaticInner.class +0 -0
  44. data/test/data/access_flags/AccessFlagsTestPublic.class +0 -0
  45. data/test/data/access_flags/AccessFlagsTestPublic.java +11 -0
  46. data/test/data/access_flags/AccessFlagsTestPublic_javap.txt +29 -0
  47. data/test/data/{makeAccessFlagsTest.bat → access_flags/make.bat} +0 -0
  48. data/test/data/{ClassVersionTest.java → class_version/ClassVersionTest.java} +0 -0
  49. data/test/data/{ClassVersionTest10.class → class_version/ClassVersionTest10.class} +0 -0
  50. data/test/data/{ClassVersionTest11.class → class_version/ClassVersionTest11.class} +0 -0
  51. data/test/data/{ClassVersionTest12.class → class_version/ClassVersionTest12.class} +0 -0
  52. data/test/data/{ClassVersionTest13.class → class_version/ClassVersionTest13.class} +0 -0
  53. data/test/data/{ClassVersionTest14.class → class_version/ClassVersionTest14.class} +0 -0
  54. data/test/data/{ClassVersionTest15.class → class_version/ClassVersionTest15.class} +0 -0
  55. data/test/data/{ClassVersionTest16.class → class_version/ClassVersionTest16.class} +0 -0
  56. data/test/data/{makeClassVersionTest.bat → class_version/make.bat} +0 -0
  57. data/test/data/{ConstantPoolTest.class → constant_pool/ConstantPoolTest.class} +0 -0
  58. data/test/data/{ConstantPoolTest.java → constant_pool/ConstantPoolTest.java} +0 -0
  59. data/test/data/{makeConstantPoolTest.bat → constant_pool/make.bat} +0 -0
  60. data/test/data/folder_classpath/JarClasspathTestFolder/ClassVersionTest10.class +0 -0
  61. data/test/data/folder_classpath/JarClasspathTestFolder/package/ClassVersionTest11.class +0 -0
  62. data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
  63. data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
  64. data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
  65. data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
  66. data/test/data/jar_classpath/make.bat +24 -0
  67. data/test/data/jar_searcher/JarClassListTest.jar +0 -0
  68. data/test/data/jar_searcher/PublicClass.java +12 -0
  69. data/test/data/jar_searcher/PublicInterface.java +5 -0
  70. data/test/data/jar_searcher/make.bat +13 -0
  71. data/test/data/java_home_classpath/jdk/jre/lib/rt.jar +0 -0
  72. data/test/data/java_home_classpath/jre/lib/rt.jar +0 -0
  73. data/test/data/java_home_classpath/jre-ext/lib/ext/ext.jar +0 -0
  74. data/test/data/java_home_classpath/jre-ext/lib/rt.jar +0 -0
  75. data/test/data/java_home_classpath/make.bat +13 -0
  76. data/test/data/references/ReferencesTest.class +0 -0
  77. data/test/data/references/ReferencesTest.java +12 -0
  78. data/test/data/references/make.bat +5 -0
  79. data/test/setup.rb +6 -5
  80. data/test/test_access_flags.rb +59 -44
  81. data/test/test_base.rb +20 -15
  82. data/test/test_class_entry.rb +198 -0
  83. data/test/test_class_version.rb +48 -46
  84. data/test/test_composite_classpath.rb +68 -0
  85. data/test/test_constant_pool.rb +49 -41
  86. data/test/test_folder_classpath.rb +45 -0
  87. data/test/test_jar_classpath.rb +57 -0
  88. data/test/test_jar_searcher.rb +93 -0
  89. data/test/test_java_class_header.rb +34 -22
  90. data/test/test_java_home_classpath.rb +50 -0
  91. data/test/test_java_name.rb +110 -0
  92. data/test/test_javaclass.rb +22 -0
  93. data/test/test_list.rb +123 -0
  94. data/test/test_package_entry.rb +91 -0
  95. data/test/test_references.rb +38 -20
  96. data/test/test_string_ux.rb +99 -2
  97. data/test/ts_all_tests.rb +42 -21
  98. metadata +171 -50
  99. data/lib/javaclass/access_flags.rb +0 -44
  100. data/lib/javaclass/class_magic.rb +0 -27
  101. data/lib/javaclass/class_version.rb +0 -65
  102. data/lib/javaclass/constant_pool.rb +0 -85
  103. data/lib/javaclass/constants/base.rb +0 -31
  104. data/lib/javaclass/constants/double_reference.rb +0 -81
  105. data/lib/javaclass/constants/single_reference.rb +0 -58
  106. data/lib/javaclass/constants/value.rb +0 -114
  107. data/lib/javaclass/java_class_header.rb +0 -88
  108. data/lib/javaclass/references.rb +0 -31
  109. data/test/data/AccessFlagsTestPublic$InnerClass.class +0 -0
  110. data/test/data/AccessFlagsTestPublic.class +0 -0
  111. data/test/data/AccessFlagsTestPublic.java +0 -7
data/test/ts_all_tests.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  #! ruby
2
2
  require 'test/unit/testsuite'
3
- #require 'test/unit/ui/tk/testrunner'
4
- #require 'test/unit/ui/console/testrunner'
3
+ require 'test/unit' if $0 == __FILE__
5
4
 
6
5
  require File.dirname(__FILE__) + '/test_string_ux'
7
6
  # require File.dirname(__FILE__) + '/test_class_magic'
@@ -11,26 +10,48 @@ require File.dirname(__FILE__) + '/test_constant_pool'
11
10
  require File.dirname(__FILE__) + '/test_references'
12
11
  require File.dirname(__FILE__) + '/test_access_flags'
13
12
  require File.dirname(__FILE__) + '/test_java_class_header'
13
+ require File.dirname(__FILE__) + '/test_jar_classpath'
14
+ require File.dirname(__FILE__) + '/test_folder_classpath'
15
+ require File.dirname(__FILE__) + '/test_java_home_classpath'
16
+ require File.dirname(__FILE__) + '/test_composite_classpath'
17
+ require File.dirname(__FILE__) + '/test_jar_searcher'
18
+ require File.dirname(__FILE__) + '/test_list'
19
+ require File.dirname(__FILE__) + '/test_class_entry'
20
+ require File.dirname(__FILE__) + '/test_package_entry'
21
+ require File.dirname(__FILE__) + '/test_java_name.rb'
22
+ require File.dirname(__FILE__) + '/test_javaclass.rb'
14
23
 
15
- module TestJavaClass
16
-
17
- class TestSuite_AllTests
18
- def self.suite
19
- suite = Test::Unit::TestSuite.new("Ruby Java Class Parser")
20
-
21
- suite << TestString.suite
22
- suite << TestClassVersion.suite
23
- suite << TestBase.suite
24
- suite << TestConstantPool.suite
25
- suite << TestReferences.suite
26
- suite << TestAccessFlags
27
- suite << TestJavaClassHeader.suite
28
-
29
- return suite
30
- end
24
+ class TsAllTests
25
+ def self.suite
26
+ suite = Test::Unit::TestSuite.new("Ruby Java Class")
27
+
28
+ suite << TestString.suite
29
+
30
+ # Java class parser
31
+ suite << TestJavaClass::TestClassFile::TestClassVersion.suite
32
+ suite << TestJavaClass::TestClassFile::TestConstants::TestBase.suite
33
+ suite << TestJavaClass::TestClassFile::TestConstantPool.suite
34
+ suite << TestJavaClass::TestClassFile::TestReferences.suite
35
+ suite << TestJavaClass::TestClassFile::TestAccessFlags.suite
36
+ suite << TestJavaClass::TestClassFile::TestJavaClassHeader.suite
37
+
38
+ # classpath parser
39
+ suite << TestJavaClass::TestClasspath::TestJarClasspath.suite
40
+ suite << TestJavaClass::TestClasspath::TestFolderClasspath.suite
41
+ suite << TestJavaClass::TestClasspath::TestJavaHomeClasspath.suite
42
+ suite << TestJavaClass::TestClasspath::TestCompositeClasspath.suite
43
+
44
+ # class list
45
+ suite << TestJavaClass::TestClassList::TestJarSearcher.suite
46
+ suite << TestJavaClass::TestClassList::TestList.suite
47
+ suite << TestJavaClass::TestClassList::TestClassEntry.suite
48
+ suite << TestJavaClass::TestClassList::TestPackageEntry.suite
49
+
50
+ # general
51
+ suite << TestJavaClass::TestJavaName.suite
52
+ suite << TestJavaClass::TestJavaClassFacade.suite
53
+
54
+ return suite
31
55
  end
32
56
 
33
57
  end
34
-
35
- #Test::Unit::UI::Tk::TestRunner.run(TestSuite_AllTests)
36
- #Test::Unit::UI::Console::TestRunner.run(TestSuite_AllTests)
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: javaclass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 3
9
+ version: 0.0.3
5
10
  platform: ruby
6
11
  authors:
7
12
  - Peter Kofler
@@ -9,98 +14,214 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-04-21 00:00:00 +02:00
17
+ date: 2010-10-03 00:00:00 +02:00
13
18
  default_executable:
14
- dependencies: []
15
-
16
- description:
17
- email: bruno41 at rubyforge dot org
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rubyzip
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 9
31
+ - 1
32
+ version: 0.9.1
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 8
46
+ - 4
47
+ version: 0.8.4
48
+ type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: ZenTest
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 4
60
+ - 4
61
+ - 0
62
+ version: 4.4.0
63
+ type: :development
64
+ version_requirements: *id003
65
+ description: Provides access to the package, protected, and public fields and methods of the classes passed to it together with a list of all outgoing references.
66
+ email: peter dot kofler at code minus cop dot org
18
67
  executables: []
19
68
 
20
69
  extensions: []
21
70
 
22
- extra_rdoc_files: []
23
-
71
+ extra_rdoc_files:
72
+ - Readme.txt
73
+ - history.txt
24
74
  files:
25
75
  - Readme.txt
26
- - lib/javaclass/access_flags.rb
27
- - lib/javaclass/class_magic.rb
28
- - lib/javaclass/class_version.rb
29
- - lib/javaclass/constants/base.rb
30
- - lib/javaclass/constants/double_reference.rb
31
- - lib/javaclass/constants/single_reference.rb
32
- - lib/javaclass/constants/value.rb
33
- - lib/javaclass/constant_pool.rb
34
- - lib/javaclass/java_class_header.rb
35
- - lib/javaclass/references.rb
76
+ - lib/javaclass/classfile/access_flags.rb
77
+ - lib/javaclass/classfile/class_magic.rb
78
+ - lib/javaclass/classfile/class_version.rb
79
+ - lib/javaclass/classfile/constants/base.rb
80
+ - lib/javaclass/classfile/constants/double_reference.rb
81
+ - lib/javaclass/classfile/constants/single_reference.rb
82
+ - lib/javaclass/classfile/constants/value.rb
83
+ - lib/javaclass/classfile/constant_pool.rb
84
+ - lib/javaclass/classfile/java_class_header.rb
85
+ - lib/javaclass/classfile/references.rb
86
+ - lib/javaclass/classlist/class_entry.rb
87
+ - lib/javaclass/classlist/jar_searcher.rb
88
+ - lib/javaclass/classlist/list.rb
89
+ - lib/javaclass/classlist/package_entry.rb
90
+ - lib/javaclass/classpath/classpaths.txt
91
+ - lib/javaclass/classpath/composite_classpath.rb
92
+ - lib/javaclass/classpath/folder_classpath.rb
93
+ - lib/javaclass/classpath/jar_classpath.rb
94
+ - lib/javaclass/classpath/java_home_classpath.rb
95
+ - lib/javaclass/classpath/port_ClassPathEntry.java
96
+ - lib/javaclass/classpath/port_ClassPathEntryFactory.java
97
+ - lib/javaclass/classpath/port_DirectoryRepository.java
98
+ - lib/javaclass/java_name.rb
99
+ - lib/javaclass/metric/ccd.rb
100
+ - lib/javaclass/metric/class_usage.rb
101
+ - lib/javaclass/metric/metrics.txt
36
102
  - lib/javaclass/string_ux.rb
37
103
  - lib/javaclass.rb
38
- - test/data/AccessFlagsTestAbstract.class
39
- - test/data/AccessFlagsTestAbstract.java
40
- - test/data/AccessFlagsTestFinal.class
41
- - test/data/AccessFlagsTestFinal.java
42
- - test/data/AccessFlagsTestInterface.class
43
- - test/data/AccessFlagsTestInterface.java
44
- - test/data/AccessFlagsTestPackage.class
45
- - test/data/AccessFlagsTestPackage.java
46
- - test/data/AccessFlagsTestPublic$InnerClass.class
47
- - test/data/AccessFlagsTestPublic.class
48
- - test/data/AccessFlagsTestPublic.java
49
- - test/data/ClassVersionTest.java
50
- - test/data/ClassVersionTest10.class
51
- - test/data/ClassVersionTest11.class
52
- - test/data/ClassVersionTest12.class
53
- - test/data/ClassVersionTest13.class
54
- - test/data/ClassVersionTest14.class
55
- - test/data/ClassVersionTest15.class
56
- - test/data/ClassVersionTest16.class
57
- - test/data/ConstantPoolTest.class
58
- - test/data/ConstantPoolTest.java
59
- - test/data/makeAccessFlagsTest.bat
60
- - test/data/makeClassVersionTest.bat
61
- - test/data/makeConstantPoolTest.bat
104
+ - test/data/access_flags/AccessFlagsTestAbstract.class
105
+ - test/data/access_flags/AccessFlagsTestAbstract.java
106
+ - test/data/access_flags/AccessFlagsTestFinal.class
107
+ - test/data/access_flags/AccessFlagsTestFinal.java
108
+ - test/data/access_flags/AccessFlagsTestInterface.class
109
+ - test/data/access_flags/AccessFlagsTestInterface.java
110
+ - test/data/access_flags/AccessFlagsTestPackage.class
111
+ - test/data/access_flags/AccessFlagsTestPackage.java
112
+ - test/data/access_flags/AccessFlagsTestPublic$Inner.class
113
+ - test/data/access_flags/AccessFlagsTestPublic$InnerInterface.class
114
+ - test/data/access_flags/AccessFlagsTestPublic$StaticInner.class
115
+ - test/data/access_flags/AccessFlagsTestPublic.class
116
+ - test/data/access_flags/AccessFlagsTestPublic.java
117
+ - test/data/access_flags/AccessFlagsTestPublic_javap.txt
118
+ - test/data/access_flags/make.bat
119
+ - test/data/class_version/ClassVersionTest.java
120
+ - test/data/class_version/ClassVersionTest10.class
121
+ - test/data/class_version/ClassVersionTest11.class
122
+ - test/data/class_version/ClassVersionTest12.class
123
+ - test/data/class_version/ClassVersionTest13.class
124
+ - test/data/class_version/ClassVersionTest14.class
125
+ - test/data/class_version/ClassVersionTest15.class
126
+ - test/data/class_version/ClassVersionTest16.class
127
+ - test/data/class_version/make.bat
128
+ - test/data/constant_pool/ConstantPoolTest.class
129
+ - test/data/constant_pool/ConstantPoolTest.java
130
+ - test/data/constant_pool/make.bat
131
+ - test/data/folder_classpath/JarClasspathTestFolder/ClassVersionTest10.class
132
+ - test/data/folder_classpath/JarClasspathTestFolder/package/ClassVersionTest11.class
133
+ - test/data/jar_classpath/JarClasspathTest.jar
134
+ - test/data/jar_classpath/JarClasspathTest.zip
135
+ - test/data/jar_classpath/JarClasspathTestManifest.jar
136
+ - test/data/jar_classpath/JarClasspathTestMultiManifest.jar
137
+ - test/data/jar_classpath/make.bat
138
+ - test/data/jar_searcher/JarClassListTest.jar
139
+ - test/data/jar_searcher/make.bat
140
+ - test/data/jar_searcher/PublicClass.java
141
+ - test/data/jar_searcher/PublicInterface.java
142
+ - test/data/java_home_classpath/jdk/jre/lib/rt.jar
143
+ - test/data/java_home_classpath/jre/lib/rt.jar
144
+ - test/data/java_home_classpath/jre-ext/lib/ext/ext.jar
145
+ - test/data/java_home_classpath/jre-ext/lib/rt.jar
146
+ - test/data/java_home_classpath/make.bat
147
+ - test/data/references/make.bat
148
+ - test/data/references/ReferencesTest.class
149
+ - test/data/references/ReferencesTest.java
150
+ - test/data/ShortClientData$1-4000Wert.class
62
151
  - test/setup.rb
63
152
  - test/test_access_flags.rb
64
153
  - test/test_base.rb
154
+ - test/test_class_entry.rb
65
155
  - test/test_class_version.rb
156
+ - test/test_composite_classpath.rb
66
157
  - test/test_constant_pool.rb
158
+ - test/test_folder_classpath.rb
159
+ - test/test_jar_classpath.rb
160
+ - test/test_jar_searcher.rb
161
+ - test/test_javaclass.rb
67
162
  - test/test_java_class_header.rb
163
+ - test/test_java_home_classpath.rb
164
+ - test/test_java_name.rb
165
+ - test/test_list.rb
166
+ - test/test_package_entry.rb
68
167
  - test/test_references.rb
69
168
  - test/test_string_ux.rb
70
169
  - test/ts_all_tests.rb
170
+ - examples/generate_class_lists.rb
71
171
  - history.txt
72
172
  - Rakefile
73
173
  has_rdoc: true
74
- homepage: http://javaclass.rubyforge.org/
75
- post_install_message:
76
- rdoc_options: []
174
+ homepage: http://code.google.com/p/javaclass-rb/
175
+ licenses: []
77
176
 
177
+ post_install_message:
178
+ rdoc_options:
179
+ - --title
180
+ - javaclass-0.0.3 Documentation
181
+ - --main
182
+ - Readme.txt
78
183
  require_paths:
79
184
  - lib
80
185
  required_ruby_version: !ruby/object:Gem::Requirement
186
+ none: false
81
187
  requirements:
82
188
  - - ">="
83
189
  - !ruby/object:Gem::Version
84
- version: "0"
85
- version:
190
+ segments:
191
+ - 1
192
+ - 8
193
+ - 6
194
+ version: 1.8.6
86
195
  required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
87
197
  requirements:
88
198
  - - ">="
89
199
  - !ruby/object:Gem::Version
200
+ segments:
201
+ - 0
90
202
  version: "0"
91
- version:
92
203
  requirements: []
93
204
 
94
205
  rubyforge_project: javaclass
95
- rubygems_version: 1.3.1
206
+ rubygems_version: 1.3.7
96
207
  signing_key:
97
- specification_version: 2
208
+ specification_version: 3
98
209
  summary: A parser and disassembler for Java class files
99
210
  test_files:
100
211
  - test/test_access_flags.rb
101
212
  - test/test_base.rb
213
+ - test/test_class_entry.rb
102
214
  - test/test_class_version.rb
215
+ - test/test_composite_classpath.rb
103
216
  - test/test_constant_pool.rb
217
+ - test/test_folder_classpath.rb
218
+ - test/test_jar_classpath.rb
219
+ - test/test_jar_searcher.rb
220
+ - test/test_javaclass.rb
104
221
  - test/test_java_class_header.rb
222
+ - test/test_java_home_classpath.rb
223
+ - test/test_java_name.rb
224
+ - test/test_list.rb
225
+ - test/test_package_entry.rb
105
226
  - test/test_references.rb
106
227
  - test/test_string_ux.rb
@@ -1,44 +0,0 @@
1
- require 'javaclass/string_ux'
2
-
3
- module JavaClass
4
-
5
- # The access flags of a class or interface.
6
- # Author:: Peter Kofler
7
- class AccessFlags
8
-
9
- # Access flags as defined by JVM spec.
10
- ACC_PUBLIC = 0x0001
11
- ACC_FINAL = 0x0010
12
- ACC_SUPER = 0x0020 # old invokespecial instruction semantics
13
- ACC_INTERFACE = 0x0200
14
- ACC_ABSTRACT = 0x0400
15
- ACC_OTHER = 0xffff ^ ACC_PUBLIC ^ ACC_FINAL ^ ACC_SUPER ^ ACC_INTERFACE ^ ACC_ABSTRACT
16
-
17
- def initialize(data, pos)
18
- @flags = data.u2(pos)
19
- raise "inconsistent flags #{flags}" if abstract? && final?
20
- raise "inconsistent flags #{flags}" if interface? && (!abstract? || final?)
21
- raise "inconsistent flags #{flags}" if (@flags & ACC_OTHER) != 0
22
- end
23
-
24
- # Return +true+ if the class is public.
25
- def public?
26
- (@flags & ACC_PUBLIC) != 0
27
- end
28
- alias accessible? public?
29
-
30
- def final?
31
- (@flags & ACC_FINAL) != 0
32
- end
33
-
34
- def abstract?
35
- (@flags & ACC_ABSTRACT) != 0
36
- end
37
-
38
- def interface?
39
- (@flags & ACC_INTERFACE) != 0
40
- end
41
-
42
- end
43
-
44
- end
@@ -1,27 +0,0 @@
1
- module JavaClass
2
-
3
- # The +CAFEBABE+ magic of a class file.
4
- # Author:: Peter Kofler
5
- class ClassMagic
6
-
7
- CAFE_BABE = "\xCA\xFE\xBA\xBE"
8
-
9
- # Check the class magic in the _data_ beginning at position _start_ (which is usually 0).
10
- def initialize(data, start=0)
11
- # "parsing"
12
- @bytes = data[start..start+3]
13
- end
14
-
15
- # Return +true+ if the data was valid, i.e. if the class started with +CAFEBABE+.
16
- def valid?
17
- @bytes == CAFE_BABE
18
- end
19
-
20
- # Return the value of the magic in this class.
21
- def bytes
22
- @bytes.dup
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,65 +0,0 @@
1
- require 'javaclass/string_ux'
2
-
3
- module JavaClass
4
-
5
- # Version of a class file.
6
- # Author:: Peter Kofler
7
- # See:: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#75883
8
- class ClassVersion
9
-
10
- attr_reader :minor
11
- attr_reader :major
12
-
13
- # Extract the class version from the bytes _data_ starting at position _start_ (which is usually 4).
14
- def initialize(data, start=4)
15
- # parsing
16
- @minor = data.u2(start)
17
- @major = data.u2(start+2)
18
- end
19
-
20
- # Return the class file version as +major+.+minor+ string like 48.0 (Java 1.4) or 50.0 (Java 6).
21
- def to_s
22
- "#{@major}.#{@minor}"
23
- end
24
-
25
- # Return the version as +major+.+minor+ float.
26
- def to_f
27
- if @minor <= 0
28
- denom = 1.0
29
- else
30
- denom = 1.0 * 10**(Math.log10(@minor).floor + 1)
31
- end
32
-
33
- @major + @minor/denom
34
- end
35
-
36
- # Return a debug output of this version.
37
- def dump
38
- [" minor version: #{@minor}", " major version: #{@major}"]
39
- end
40
-
41
- # Return the JDK version corresponding to this version like "1.6" or "unknown" if none matched.
42
- def jdk_version
43
- v = to_f
44
- if v >= 45.0 && v <= 45.3 # 1.0.2 supports class file format versions 45.0 through 45.3 inclusive.
45
- '1.0'
46
- elsif v > 45.3 && v <= 45.65535 # 1.1.X can support class file formats of versions in the range 45.0 through 45.65535 inclusive
47
- '1.1'
48
- elsif v == 46.0 # JDK 1.2=46
49
- '1.2'
50
- elsif v == 47.0 # JDK 1.3=47
51
- '1.3'
52
- elsif v == 48.0 # JDK 1.4=48
53
- '1.4'
54
- elsif v == 49.0 # J2SE 5.0=49
55
- '1.5'
56
- elsif v == 50.0 # J2SE 6.0=50
57
- '1.6'
58
- else
59
- 'unknown'
60
- end
61
- end
62
-
63
- end
64
-
65
- end
@@ -1,85 +0,0 @@
1
- require 'javaclass/string_ux'
2
- require 'javaclass/constants/value'
3
- require 'javaclass/constants/single_reference'
4
- require 'javaclass/constants/double_reference'
5
-
6
- module JavaClass
7
-
8
- # Container of the constant pool's constants.
9
- # Author:: Peter Kofler
10
- class ConstantPool
11
-
12
- # Types of constants by their +tag+.
13
- CONSTANT_TYPE_TAGS = {
14
- CLASS_TAG = 7 => Constants::ConstantClass,
15
- FIELD_TAG = 9 => Constants::ConstantField,
16
- METHOD_TAG = 10 => Constants::ConstantMethod,
17
- INTERFACE_METHOD_TAG = 11 => Constants::ConstantInterfaceMethod,
18
- STRING_TAG = 8 => Constants::ConstantString,
19
- INT_TAG = 3 => Constants::ConstantInt,
20
- FLOAT_TAG = 4 => Constants::ConstantFloat,
21
- LONG_TAG = 5 => Constants::ConstantLong,
22
- DOUBLE_TAG = 6 => Constants::ConstantDouble,
23
- NAME_AND_TYPE_TAG = 12 => Constants::ConstantNameAndType,
24
- ASCIZ_TAG = 1 => Constants::ConstantAsciz,
25
- }
26
-
27
- # Size of the whole constant pool in bytes.
28
- attr_reader :size
29
-
30
- # Parse the constant pool from the bytes _data_ beginning at position _start_ (which is usually 8).
31
- def initialize(data, start=8)
32
- @pool = {} # cnt (fixnum) => constant
33
-
34
- # parsing
35
- @item_count = data.u2(start)
36
- pos = start + 2
37
- cnt = 1
38
- while cnt <= @item_count-1
39
-
40
- type = CONSTANT_TYPE_TAGS[data.u1(pos)]
41
- unless type
42
- #puts dump.join("\n")
43
- raise "const ##{cnt} = unknown constant pool tag #{data[pos]} at pos #{pos} in class"
44
- end
45
-
46
- constant = type.new(@pool, data, pos)
47
- @pool[cnt] = constant
48
- pos += constant.size
49
- cnt += constant.slots
50
-
51
- end
52
-
53
- @size = pos - start
54
- end
55
-
56
- # Return the number of pool items. This number might be larger than +items+ available,
57
- # because +long+ and +double+ constants take two slots.
58
- def item_count
59
- @item_count-1
60
- end
61
-
62
- # Return the _index_'th pool item. _index_ is the real index in the pool which may skip numbers.
63
- def[](index)
64
- @pool[index]
65
- end
66
-
67
- # Return an array of the ordered list of constants.
68
- def items
69
- @pool.keys.sort.collect { |k| self[k] }
70
- end
71
-
72
- # Return an array of all constants of the given _tags_ types.
73
- def find(*tags)
74
- items.find_all { |item| tags.include? item.tag }
75
- end
76
-
77
- # Return a debug output of the whole pool.
78
- def dump
79
- [" Constant pool:"] + @pool.keys.sort.collect { |k| "const ##{k} = #{self[k].dump}"}
80
- end
81
-
82
- end
83
-
84
- end
85
-
@@ -1,31 +0,0 @@
1
- require 'javaclass/string_ux'
2
-
3
- module JavaClass
4
- module Constants # :nodoc:
5
-
6
- # Superclass of constant values in the constant pool. Every constant has a +name+, a +tag+ and a +size+ in bytes.
7
- # Author:: Peter Kofler
8
- class Base
9
-
10
- attr_reader :name
11
- attr_reader :tag
12
- attr_reader :size
13
- attr_reader :slots
14
-
15
- # Set default constants.
16
- def initialize(name=nil)
17
- @name = self.class.to_s[/::[^:]+$/][10..-1] # skip modules (::) and "Constant"
18
- @name = name if name
19
- @size = 3
20
- @slots = 1
21
- end
22
-
23
- # Return part of debug output.
24
- def dump
25
- "#{@name}\t" # #{@tag}
26
- end
27
-
28
- end
29
-
30
- end
31
- end
@@ -1,81 +0,0 @@
1
- require 'javaclass/constants/single_reference'
2
-
3
- module JavaClass
4
- module Constants # :nodoc:
5
-
6
- # Superclass of double reference constants like +ConstantField+ (+FieldRef+) in the constant pool.
7
- # Author:: Peter Kofler
8
- class DoubleReference < SingleReference
9
-
10
- attr_reader :second_index
11
-
12
- # Define a double reference into _pool_ from _data_ beginning at _start_
13
- def initialize(pool, data, start, name=nil)
14
- super(pool, data, start, name)
15
- @size = 5
16
-
17
- @second_index = data.u2(start+3)
18
- end
19
-
20
- # Return the second value, which is the referenced value from the pool.
21
- def second_value
22
- get(@second_index)
23
- end
24
-
25
- # Return the value, which are both referenced values from the pool.
26
- def to_s
27
- "#{super}.#{second_value}"
28
- end
29
-
30
- # Return part of debug output.
31
- def dump
32
- "#{@name}\t##{@first_index}.##{@second_index};\t// #{to_s}"
33
- end
34
-
35
- end
36
-
37
- class ConstantField < DoubleReference
38
- alias class_index first_index
39
- alias name_and_type_index second_index
40
- def initialize(pool, data, start)
41
- super(pool, data, start)
42
- end
43
- alias class_name first_value
44
- end
45
-
46
- class ConstantMethod < DoubleReference
47
- alias class_index first_index
48
- alias name_and_type_index second_index
49
- def initialize(pool, data, start)
50
- super(pool, data, start)
51
- end
52
- alias class_name first_value
53
- end
54
-
55
- class ConstantInterfaceMethod < DoubleReference
56
- alias class_index first_index
57
- alias name_and_type_index second_index
58
- def initialize(pool, data, start)
59
- super(pool, data, start)
60
- end
61
- alias class_name first_value
62
- end
63
-
64
- class ConstantNameAndType < DoubleReference
65
- alias name_index first_index
66
- alias descriptor_index second_index
67
- def initialize(pool, data, start)
68
- super(pool, data, start)
69
- end
70
-
71
- def to_s
72
- "#{get(name_index)}:#{get(descriptor_index)}"
73
- end
74
-
75
- def dump
76
- "#{@name}\t##{name_index}:##{descriptor_index};// #{to_s}"
77
- end
78
- end
79
-
80
- end
81
- end