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.
- 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
|