javaclass 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +208 -23
- data/Readme.txt +56 -19
- data/examples/generate_class_lists.rb +61 -0
- data/history.txt +13 -19
- data/lib/javaclass/classfile/access_flags.rb +52 -0
- data/lib/javaclass/classfile/class_magic.rb +29 -0
- data/lib/javaclass/classfile/class_version.rb +67 -0
- data/lib/javaclass/classfile/constant_pool.rb +91 -0
- data/lib/javaclass/classfile/constants/base.rb +33 -0
- data/lib/javaclass/classfile/constants/double_reference.rb +99 -0
- data/lib/javaclass/classfile/constants/single_reference.rb +65 -0
- data/lib/javaclass/classfile/constants/value.rb +116 -0
- data/lib/javaclass/classfile/java_class_header.rb +102 -0
- data/lib/javaclass/classfile/references.rb +43 -0
- data/lib/javaclass/classlist/class_entry.rb +89 -0
- data/lib/javaclass/classlist/jar_searcher.rb +69 -0
- data/lib/javaclass/classlist/list.rb +126 -0
- data/lib/javaclass/classlist/package_entry.rb +87 -0
- data/lib/javaclass/classpath/classpaths.txt +2 -0
- data/lib/javaclass/classpath/composite_classpath.rb +99 -0
- data/lib/javaclass/classpath/folder_classpath.rb +83 -0
- data/lib/javaclass/classpath/jar_classpath.rb +100 -0
- data/lib/javaclass/classpath/java_home_classpath.rb +40 -0
- data/lib/javaclass/classpath/port_ClassPathEntry.java +202 -0
- data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +311 -0
- data/lib/javaclass/classpath/port_DirectoryRepository.java +24 -0
- data/lib/javaclass/java_name.rb +90 -0
- data/lib/javaclass/metric/ccd.rb +68 -0
- data/lib/javaclass/metric/class_usage.rb +41 -0
- data/lib/javaclass/metric/metrics.txt +15 -0
- data/lib/javaclass.rb +44 -11
- data/test/data/ShortClientData$1-4000Wert.class +0 -0
- data/test/data/{AccessFlagsTestAbstract.class → access_flags/AccessFlagsTestAbstract.class} +0 -0
- data/test/data/{AccessFlagsTestAbstract.java → access_flags/AccessFlagsTestAbstract.java} +0 -0
- data/test/data/{AccessFlagsTestFinal.class → access_flags/AccessFlagsTestFinal.class} +0 -0
- data/test/data/{AccessFlagsTestFinal.java → access_flags/AccessFlagsTestFinal.java} +0 -0
- data/test/data/{AccessFlagsTestInterface.class → access_flags/AccessFlagsTestInterface.class} +0 -0
- data/test/data/{AccessFlagsTestInterface.java → access_flags/AccessFlagsTestInterface.java} +0 -0
- data/test/data/{AccessFlagsTestPackage.class → access_flags/AccessFlagsTestPackage.class} +0 -0
- data/test/data/{AccessFlagsTestPackage.java → access_flags/AccessFlagsTestPackage.java} +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic$Inner.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic$InnerInterface.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic$StaticInner.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPublic.java +11 -0
- data/test/data/access_flags/AccessFlagsTestPublic_javap.txt +29 -0
- data/test/data/{makeAccessFlagsTest.bat → access_flags/make.bat} +0 -0
- data/test/data/{ClassVersionTest.java → class_version/ClassVersionTest.java} +0 -0
- data/test/data/{ClassVersionTest10.class → class_version/ClassVersionTest10.class} +0 -0
- data/test/data/{ClassVersionTest11.class → class_version/ClassVersionTest11.class} +0 -0
- data/test/data/{ClassVersionTest12.class → class_version/ClassVersionTest12.class} +0 -0
- data/test/data/{ClassVersionTest13.class → class_version/ClassVersionTest13.class} +0 -0
- data/test/data/{ClassVersionTest14.class → class_version/ClassVersionTest14.class} +0 -0
- data/test/data/{ClassVersionTest15.class → class_version/ClassVersionTest15.class} +0 -0
- data/test/data/{ClassVersionTest16.class → class_version/ClassVersionTest16.class} +0 -0
- data/test/data/{makeClassVersionTest.bat → class_version/make.bat} +0 -0
- data/test/data/{ConstantPoolTest.class → constant_pool/ConstantPoolTest.class} +0 -0
- data/test/data/{ConstantPoolTest.java → constant_pool/ConstantPoolTest.java} +0 -0
- data/test/data/{makeConstantPoolTest.bat → constant_pool/make.bat} +0 -0
- data/test/data/folder_classpath/JarClasspathTestFolder/ClassVersionTest10.class +0 -0
- data/test/data/folder_classpath/JarClasspathTestFolder/package/ClassVersionTest11.class +0 -0
- data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
- data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
- data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
- data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
- data/test/data/jar_classpath/make.bat +24 -0
- data/test/data/jar_searcher/JarClassListTest.jar +0 -0
- data/test/data/jar_searcher/PublicClass.java +12 -0
- data/test/data/jar_searcher/PublicInterface.java +5 -0
- data/test/data/jar_searcher/make.bat +13 -0
- data/test/data/java_home_classpath/jdk/jre/lib/rt.jar +0 -0
- data/test/data/java_home_classpath/jre/lib/rt.jar +0 -0
- data/test/data/java_home_classpath/jre-ext/lib/ext/ext.jar +0 -0
- data/test/data/java_home_classpath/jre-ext/lib/rt.jar +0 -0
- data/test/data/java_home_classpath/make.bat +13 -0
- data/test/data/references/ReferencesTest.class +0 -0
- data/test/data/references/ReferencesTest.java +12 -0
- data/test/data/references/make.bat +5 -0
- data/test/setup.rb +6 -5
- data/test/test_access_flags.rb +59 -44
- data/test/test_base.rb +20 -15
- data/test/test_class_entry.rb +198 -0
- data/test/test_class_version.rb +48 -46
- data/test/test_composite_classpath.rb +68 -0
- data/test/test_constant_pool.rb +49 -41
- data/test/test_folder_classpath.rb +45 -0
- data/test/test_jar_classpath.rb +57 -0
- data/test/test_jar_searcher.rb +93 -0
- data/test/test_java_class_header.rb +34 -22
- data/test/test_java_home_classpath.rb +50 -0
- data/test/test_java_name.rb +110 -0
- data/test/test_javaclass.rb +22 -0
- data/test/test_list.rb +123 -0
- data/test/test_package_entry.rb +91 -0
- data/test/test_references.rb +38 -20
- data/test/test_string_ux.rb +99 -2
- data/test/ts_all_tests.rb +42 -21
- metadata +171 -50
- data/lib/javaclass/access_flags.rb +0 -44
- data/lib/javaclass/class_magic.rb +0 -27
- data/lib/javaclass/class_version.rb +0 -65
- data/lib/javaclass/constant_pool.rb +0 -85
- data/lib/javaclass/constants/base.rb +0 -31
- data/lib/javaclass/constants/double_reference.rb +0 -81
- data/lib/javaclass/constants/single_reference.rb +0 -58
- data/lib/javaclass/constants/value.rb +0 -114
- data/lib/javaclass/java_class_header.rb +0 -88
- data/lib/javaclass/references.rb +0 -31
- data/test/data/AccessFlagsTestPublic$InnerClass.class +0 -0
- data/test/data/AccessFlagsTestPublic.class +0 -0
- 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
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
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:
|
17
|
+
date: 2010-10-03 00:00:00 +02:00
|
13
18
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
|
17
|
-
|
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$
|
47
|
-
- test/data/AccessFlagsTestPublic.class
|
48
|
-
- test/data/AccessFlagsTestPublic.
|
49
|
-
- test/data/
|
50
|
-
- test/data/
|
51
|
-
- test/data/
|
52
|
-
- test/data/
|
53
|
-
- test/data/
|
54
|
-
- test/data/
|
55
|
-
- test/data/
|
56
|
-
- test/data/
|
57
|
-
- test/data/
|
58
|
-
- test/data/
|
59
|
-
- test/data/
|
60
|
-
- test/data/
|
61
|
-
- test/data/
|
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://
|
75
|
-
|
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
|
-
|
85
|
-
|
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.
|
206
|
+
rubygems_version: 1.3.7
|
96
207
|
signing_key:
|
97
|
-
specification_version:
|
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
|