javaclass 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +67 -56
- data/Readme.txt +42 -39
- data/example_task.rb +172 -0
- data/examples/check_interface_names.rb +44 -0
- data/examples/corpus.rb +19 -0
- data/examples/count_classes_in_modules.rb +38 -0
- data/examples/cumulative_dependencies.rb +39 -0
- data/examples/find_all_imported_types.rb +44 -0
- data/examples/find_referenced_modules.rb +53 -0
- data/examples/find_unreferenced_classes.rb +65 -0
- data/examples/generate_class_lists.rb +67 -43
- data/examples/profiler_scratchpad.rb +33 -0
- data/examples/simple_usage.rb +42 -0
- data/history.txt +29 -7
- data/javaclass.gemspec +31 -0
- data/lib/javaclass/adder_tree.rb +92 -0
- data/lib/javaclass/analyse/dependencies.rb +52 -0
- data/lib/javaclass/{metric/metrics.txt → analyse/ideas.txt} +2 -2
- data/lib/javaclass/analyse/transitive_dependencies.rb +52 -0
- data/lib/javaclass/classfile/access_flag_constants.rb +24 -0
- data/lib/javaclass/classfile/access_flags.rb +49 -26
- data/lib/javaclass/classfile/class_format_error.rb +37 -0
- data/lib/javaclass/classfile/class_magic.rb +16 -8
- data/lib/javaclass/classfile/class_version.rb +19 -25
- data/lib/javaclass/classfile/constant_pool.rb +110 -45
- data/lib/javaclass/classfile/constants/base.rb +33 -12
- data/lib/javaclass/classfile/constants/double_reference.rb +55 -41
- data/lib/javaclass/classfile/constants/single_reference.rb +29 -21
- data/lib/javaclass/classfile/constants/value.rb +43 -33
- data/lib/javaclass/classfile/java_class_header.rb +72 -46
- data/lib/javaclass/classfile/java_class_header_as_java_name.rb +33 -0
- data/lib/javaclass/classfile/java_class_header_shortcuts.rb +19 -0
- data/lib/javaclass/classfile/references.rb +21 -19
- data/lib/javaclass/classlist/class_entry.rb +26 -27
- data/lib/javaclass/classlist/jar_searcher.rb +34 -25
- data/lib/javaclass/classlist/list.rb +31 -31
- data/lib/javaclass/classlist/package_entry.rb +25 -24
- data/lib/javaclass/classpath/any_classpath.rb +48 -0
- data/lib/javaclass/classpath/class_not_found_error.rb +20 -0
- data/lib/javaclass/classpath/classpaths.txt +2 -2
- data/lib/javaclass/classpath/composite_classpath.rb +56 -54
- data/lib/javaclass/classpath/convention_classpath.rb +38 -0
- data/lib/javaclass/classpath/eclipse_classpath.rb +74 -0
- data/lib/javaclass/classpath/factory.rb +65 -0
- data/lib/javaclass/classpath/file_classpath.rb +47 -0
- data/lib/javaclass/classpath/folder_classpath.rb +42 -44
- data/lib/javaclass/classpath/jar_classpath.rb +91 -52
- data/lib/javaclass/classpath/java_home_classpath.rb +24 -13
- data/lib/javaclass/classpath/maven_classpath.rb +44 -0
- data/lib/javaclass/classpath/temporary_unpacker.rb +111 -0
- data/lib/javaclass/classpath/tracking_classpath.rb +144 -0
- data/lib/javaclass/classscanner/ideas.txt +3 -0
- data/lib/javaclass/classscanner/imported_types.rb +29 -0
- data/lib/javaclass/classscanner/scanners.rb +29 -0
- data/lib/javaclass/delegate_directive.rb +15 -0
- data/lib/javaclass/dsl/caching_classpath.rb +38 -0
- data/lib/javaclass/dsl/classpath_analysers.rb +27 -0
- data/lib/javaclass/dsl/java_name_factory.rb +79 -0
- data/lib/javaclass/dsl/loader.rb +42 -0
- data/lib/javaclass/dsl/loading_classpath.rb +53 -0
- data/lib/javaclass/dsl/mixin.rb +54 -0
- data/lib/javaclass/gems/zip_file.rb +154 -0
- data/lib/javaclass/java_language.rb +50 -0
- data/lib/javaclass/java_name.rb +329 -55
- data/lib/javaclass/java_name_scanner.rb +95 -0
- data/lib/javaclass/resources/iso_3166_countries.txt +240 -0
- data/lib/javaclass/resources/jdk0_packages.txt +6 -0
- data/lib/javaclass/resources/jdk1_packages.txt +6 -0
- data/lib/javaclass/resources/jdk2_packages.txt +4 -0
- data/lib/javaclass/resources/jdk3_packages.txt +6 -0
- data/lib/javaclass/resources/jdk4_packages.txt +22 -0
- data/lib/javaclass/resources/jdk5_packages.txt +5 -0
- data/lib/javaclass/resources/jdk6_packages.txt +7 -0
- data/lib/javaclass/resources/jdk7_packages.txt +0 -0
- data/lib/javaclass/resources/jdk_packages.txt +53 -0
- data/lib/javaclass/resources/reserved_words.txt +50 -0
- data/lib/javaclass/string_hexdump.rb +76 -0
- data/lib/javaclass/string_ux.rb +21 -10
- data/lib/javaclass.rb +16 -41
- data/license.txt +28 -0
- data/planned.txt +13 -0
- data/test/data/Object_102.class +0 -0
- data/test/data/Runnable_102.class +0 -0
- data/test/data/access_flags/AccessFlagsTestAnnotation.class +0 -0
- data/test/data/access_flags/AccessFlagsTestAnnotation.java +3 -0
- data/test/data/access_flags/AccessFlagsTestEnum$1.class +0 -0
- data/test/data/access_flags/AccessFlagsTestEnum.class +0 -0
- data/test/data/access_flags/AccessFlagsTestEnum.java +6 -0
- data/test/data/access_flags/AccessFlagsTestInner$1.class +0 -0
- data/test/data/access_flags/AccessFlagsTestInner$2.class +0 -0
- data/test/data/access_flags/AccessFlagsTestInner.class +0 -0
- data/test/data/access_flags/AccessFlagsTestInner.java +13 -0
- data/test/data/access_flags/AccessFlagsTestPackage.class +0 -0
- data/test/data/access_flags/AccessFlagsTestPackage.java +1 -1
- data/test/data/api/packagename/AccessFlagsTestPublic.class +0 -0
- data/test/data/class_version/ClassVersionTest17.class +0 -0
- data/test/data/class_version/make.bat +6 -2
- data/test/data/eclipse_classpath/classes/ClassVersionTest12.class +0 -0
- data/test/data/eclipse_classpath/lib/JarClasspathTest.jar +0 -0
- data/test/data/eclipse_classpath/test-classes/ClassVersionTest13.class +0 -0
- data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/ClassVersionTest10.class +0 -0
- data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/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 +6 -2
- data/test/data/jar_searcher/BrokenRunnable_102.class +0 -0
- data/test/data/java_home_classpath/jdk118/lib/classes.zip +0 -0
- data/test/data/java_name_scanner/META-INF/MANIFEST.MF +12 -0
- data/test/data/java_name_scanner/plugin.xml +18 -0
- data/test/data/maven_classpath/module/pom.xml +8 -0
- data/test/data/maven_classpath/module/target/classes/ClassVersionTest12.class +0 -0
- data/test/data/maven_classpath/pom.xml +8 -0
- data/test/data/maven_classpath/target/classes/ClassVersionTest10.class +0 -0
- data/test/data/maven_classpath/target/test-classes/ClassVersionTest11.class +0 -0
- data/test/data/transitive_dependencies/A.class +0 -0
- data/test/data/transitive_dependencies/A.java +5 -0
- data/test/data/transitive_dependencies/B.class +0 -0
- data/test/data/transitive_dependencies/B.java +3 -0
- data/test/data/transitive_dependencies/C.class +0 -0
- data/test/data/transitive_dependencies/C.java +3 -0
- data/test/data/transitive_dependencies/Start.class +0 -0
- data/test/data/transitive_dependencies/Start.java +4 -0
- data/test/data/transitive_dependencies/make.bat +3 -0
- data/test/data/zip_file/commons-math-2.2-broken.zip +0 -0
- data/test/data/zip_file/regenerated-with-7zip.zip +0 -0
- data/test/data/zip_file/regenerated-with-jar.zip +0 -0
- data/test/dot_classpath.rb +33 -0
- data/test/logging_folder_classpath.rb +19 -0
- data/test/setup.rb +1 -1
- data/test/test_access_flags.rb +58 -32
- data/test/test_adder_tree.rb +78 -0
- data/test/test_any_classpath.rb +39 -0
- data/test/test_base.rb +9 -7
- data/test/test_caching_classpath.rb +41 -0
- data/test/test_class_entry.rb +60 -60
- data/test/test_class_magic.rb +31 -0
- data/test/test_class_version.rb +25 -25
- data/test/test_composite_classpath.rb +22 -23
- data/test/test_constant_pool.rb +37 -13
- data/test/test_convention_classpath.rb +39 -0
- data/test/test_eclipse_classpath.rb +73 -0
- data/test/test_factory.rb +61 -0
- data/test/test_folder_classpath.rb +26 -10
- data/test/test_imported_types.rb +34 -0
- data/test/test_jar_classpath.rb +29 -14
- data/test/test_jar_searcher.rb +27 -14
- data/test/test_java_class_header.rb +22 -10
- data/test/test_java_class_header_as_java_name.rb +41 -0
- data/test/test_java_home_classpath.rb +17 -11
- data/test/test_java_name.rb +204 -64
- data/test/test_java_name_factory.rb +52 -0
- data/test/test_java_name_scanner.rb +24 -0
- data/test/test_javaclass_api.rb +43 -0
- data/test/test_list.rb +58 -44
- data/test/test_load_directive.rb +34 -0
- data/test/test_maven_classpath.rb +46 -0
- data/test/test_package_entry.rb +27 -22
- data/test/test_references.rb +14 -14
- data/test/test_string_hexdump.rb +24 -0
- data/test/test_string_ux.rb +18 -106
- data/test/test_tracking_classpath.rb +112 -0
- data/test/test_transitive_dependencies.rb +31 -0
- data/test/test_unpacking_jar_classpath.rb +43 -0
- data/test/test_zip_file.rb +33 -0
- data/test/ts_all_tests.rb +80 -18
- data/thanks.txt +2 -0
- metadata +151 -22
- data/lib/javaclass/classpath/port_ClassPathEntry.java +0 -202
- data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +0 -311
- data/lib/javaclass/classpath/port_DirectoryRepository.java +0 -24
- data/lib/javaclass/metric/ccd.rb +0 -68
- data/lib/javaclass/metric/class_usage.rb +0 -41
- data/test/test_javaclass.rb +0 -22
@@ -0,0 +1,240 @@
|
|
1
|
+
ax
|
2
|
+
af
|
3
|
+
al
|
4
|
+
dz
|
5
|
+
as
|
6
|
+
ad
|
7
|
+
ao
|
8
|
+
ai
|
9
|
+
aq
|
10
|
+
ag
|
11
|
+
ar
|
12
|
+
am
|
13
|
+
aw
|
14
|
+
au
|
15
|
+
at
|
16
|
+
az
|
17
|
+
bs
|
18
|
+
bh
|
19
|
+
bd
|
20
|
+
bb
|
21
|
+
by
|
22
|
+
be
|
23
|
+
bz
|
24
|
+
bj
|
25
|
+
bm
|
26
|
+
bt
|
27
|
+
bo
|
28
|
+
ba
|
29
|
+
bw
|
30
|
+
bv
|
31
|
+
br
|
32
|
+
io
|
33
|
+
bn
|
34
|
+
bg
|
35
|
+
bf
|
36
|
+
bi
|
37
|
+
kh
|
38
|
+
cm
|
39
|
+
ca
|
40
|
+
cv
|
41
|
+
ky
|
42
|
+
cf
|
43
|
+
td
|
44
|
+
cl
|
45
|
+
cn
|
46
|
+
cx
|
47
|
+
cc
|
48
|
+
co
|
49
|
+
km
|
50
|
+
cd
|
51
|
+
cg
|
52
|
+
ck
|
53
|
+
cr
|
54
|
+
ci
|
55
|
+
hr
|
56
|
+
cu
|
57
|
+
cy
|
58
|
+
cz
|
59
|
+
dk
|
60
|
+
dj
|
61
|
+
dm
|
62
|
+
do
|
63
|
+
ec
|
64
|
+
eg
|
65
|
+
sv
|
66
|
+
gq
|
67
|
+
er
|
68
|
+
ee
|
69
|
+
et
|
70
|
+
fk
|
71
|
+
fo
|
72
|
+
fj
|
73
|
+
fi
|
74
|
+
fr
|
75
|
+
gf
|
76
|
+
pf
|
77
|
+
tf
|
78
|
+
ga
|
79
|
+
gm
|
80
|
+
ge
|
81
|
+
de
|
82
|
+
gh
|
83
|
+
gi
|
84
|
+
gr
|
85
|
+
gl
|
86
|
+
gd
|
87
|
+
gp
|
88
|
+
gu
|
89
|
+
gt
|
90
|
+
gn
|
91
|
+
gw
|
92
|
+
gy
|
93
|
+
ht
|
94
|
+
hm
|
95
|
+
hn
|
96
|
+
hk
|
97
|
+
hu
|
98
|
+
is
|
99
|
+
in
|
100
|
+
id
|
101
|
+
ir
|
102
|
+
iq
|
103
|
+
ie
|
104
|
+
il
|
105
|
+
it
|
106
|
+
jm
|
107
|
+
jp
|
108
|
+
jo
|
109
|
+
kz
|
110
|
+
ke
|
111
|
+
ki
|
112
|
+
kp
|
113
|
+
kr
|
114
|
+
kw
|
115
|
+
kg
|
116
|
+
la
|
117
|
+
lv
|
118
|
+
lb
|
119
|
+
ls
|
120
|
+
lr
|
121
|
+
ly
|
122
|
+
li
|
123
|
+
lt
|
124
|
+
lu
|
125
|
+
mo
|
126
|
+
mk
|
127
|
+
mg
|
128
|
+
mw
|
129
|
+
my
|
130
|
+
mv
|
131
|
+
ml
|
132
|
+
mt
|
133
|
+
mh
|
134
|
+
mq
|
135
|
+
mr
|
136
|
+
mu
|
137
|
+
yt
|
138
|
+
mx
|
139
|
+
fm
|
140
|
+
md
|
141
|
+
mc
|
142
|
+
mn
|
143
|
+
ms
|
144
|
+
ma
|
145
|
+
mz
|
146
|
+
mm
|
147
|
+
na
|
148
|
+
nr
|
149
|
+
np
|
150
|
+
nl
|
151
|
+
an
|
152
|
+
nc
|
153
|
+
nz
|
154
|
+
ni
|
155
|
+
ne
|
156
|
+
ng
|
157
|
+
nu
|
158
|
+
nf
|
159
|
+
mp
|
160
|
+
no
|
161
|
+
om
|
162
|
+
pk
|
163
|
+
pw
|
164
|
+
ps
|
165
|
+
pa
|
166
|
+
pg
|
167
|
+
py
|
168
|
+
pe
|
169
|
+
ph
|
170
|
+
pn
|
171
|
+
pl
|
172
|
+
pt
|
173
|
+
pr
|
174
|
+
qa
|
175
|
+
re
|
176
|
+
ro
|
177
|
+
ru
|
178
|
+
rw
|
179
|
+
sh
|
180
|
+
kn
|
181
|
+
lc
|
182
|
+
pm
|
183
|
+
vc
|
184
|
+
ws
|
185
|
+
sm
|
186
|
+
st
|
187
|
+
sa
|
188
|
+
sn
|
189
|
+
cs
|
190
|
+
sc
|
191
|
+
sl
|
192
|
+
sg
|
193
|
+
sk
|
194
|
+
si
|
195
|
+
sb
|
196
|
+
so
|
197
|
+
za
|
198
|
+
gs
|
199
|
+
es
|
200
|
+
lk
|
201
|
+
sd
|
202
|
+
sr
|
203
|
+
sj
|
204
|
+
sz
|
205
|
+
se
|
206
|
+
ch
|
207
|
+
sy
|
208
|
+
tw
|
209
|
+
tj
|
210
|
+
tz
|
211
|
+
th
|
212
|
+
tl
|
213
|
+
tg
|
214
|
+
tk
|
215
|
+
to
|
216
|
+
tt
|
217
|
+
tn
|
218
|
+
tr
|
219
|
+
tm
|
220
|
+
tc
|
221
|
+
tv
|
222
|
+
ug
|
223
|
+
ua
|
224
|
+
ae
|
225
|
+
gb
|
226
|
+
us
|
227
|
+
um
|
228
|
+
uy
|
229
|
+
uz
|
230
|
+
vu
|
231
|
+
va
|
232
|
+
ve
|
233
|
+
vn
|
234
|
+
vg
|
235
|
+
vi
|
236
|
+
wf
|
237
|
+
eh
|
238
|
+
ye
|
239
|
+
zm
|
240
|
+
zw
|
@@ -0,0 +1,22 @@
|
|
1
|
+
java.nio
|
2
|
+
javax.crypto
|
3
|
+
javax.imageio
|
4
|
+
javax.net
|
5
|
+
javax.print
|
6
|
+
javax.security
|
7
|
+
javax.sql
|
8
|
+
javax.xml.parsers
|
9
|
+
javax.xml.transform
|
10
|
+
org.apache.crimson
|
11
|
+
org.apache.xalan
|
12
|
+
org.apache.xml
|
13
|
+
org.apache.xpath
|
14
|
+
org.ietf.jgss
|
15
|
+
org.omg.Dynamic
|
16
|
+
org.omg.DynamicAny
|
17
|
+
org.omg.IOP
|
18
|
+
org.omg.Messaging
|
19
|
+
org.omg.PortableInterceptor
|
20
|
+
org.omg.PortableServer
|
21
|
+
org.w3c.dom
|
22
|
+
org.xml.sax
|
File without changes
|
@@ -0,0 +1,53 @@
|
|
1
|
+
java.applet
|
2
|
+
java.awt
|
3
|
+
java.beans
|
4
|
+
java.io
|
5
|
+
java.lang
|
6
|
+
java.math
|
7
|
+
java.net
|
8
|
+
java.nio
|
9
|
+
java.rmi
|
10
|
+
java.security
|
11
|
+
java.sql
|
12
|
+
java.text
|
13
|
+
java.util
|
14
|
+
javax.accessibility
|
15
|
+
javax.activation
|
16
|
+
javax.activity
|
17
|
+
javax.annotation
|
18
|
+
javax.crypto
|
19
|
+
javax.imageio
|
20
|
+
javax.jnlp
|
21
|
+
javax.jws
|
22
|
+
javax.lang.model
|
23
|
+
javax.management
|
24
|
+
javax.naming
|
25
|
+
javax.net
|
26
|
+
javax.print
|
27
|
+
javax.rmi
|
28
|
+
javax.script
|
29
|
+
javax.security
|
30
|
+
javax.smartcardio
|
31
|
+
javax.sound
|
32
|
+
javax.sql
|
33
|
+
javax.swing
|
34
|
+
javax.tools
|
35
|
+
javax.transaction
|
36
|
+
javax.xml
|
37
|
+
org.apache.crimson
|
38
|
+
org.apache.xalan
|
39
|
+
org.apache.xml
|
40
|
+
org.apache.xpath
|
41
|
+
org.ietf.jgss
|
42
|
+
org.omg.CORBA
|
43
|
+
org.omg.CORBA_2_3
|
44
|
+
org.omg.CosNaming
|
45
|
+
org.omg.Dynamic
|
46
|
+
org.omg.DynamicAny
|
47
|
+
org.omg.IOP
|
48
|
+
org.omg.Messaging
|
49
|
+
org.omg.PortableInterceptor
|
50
|
+
org.omg.PortableServer
|
51
|
+
org.omg.SendingContext
|
52
|
+
org.w3c.dom
|
53
|
+
org.xml.sax
|
@@ -0,0 +1,50 @@
|
|
1
|
+
abstract
|
2
|
+
assert
|
3
|
+
boolean
|
4
|
+
break
|
5
|
+
byte
|
6
|
+
case
|
7
|
+
catch
|
8
|
+
char
|
9
|
+
class
|
10
|
+
const
|
11
|
+
continue
|
12
|
+
default
|
13
|
+
do
|
14
|
+
double
|
15
|
+
else
|
16
|
+
enum
|
17
|
+
extends
|
18
|
+
final
|
19
|
+
finally
|
20
|
+
float
|
21
|
+
for
|
22
|
+
goto
|
23
|
+
if
|
24
|
+
implements
|
25
|
+
import
|
26
|
+
instanceof
|
27
|
+
int
|
28
|
+
interface
|
29
|
+
long
|
30
|
+
native
|
31
|
+
new
|
32
|
+
package
|
33
|
+
private
|
34
|
+
protected
|
35
|
+
public
|
36
|
+
return
|
37
|
+
short
|
38
|
+
static
|
39
|
+
strictfp
|
40
|
+
super
|
41
|
+
switch
|
42
|
+
synchronized
|
43
|
+
this
|
44
|
+
throw
|
45
|
+
throws
|
46
|
+
transient
|
47
|
+
try
|
48
|
+
void
|
49
|
+
volatile
|
50
|
+
while
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Add some +hexdump+ helper method to dump the data contained in this String.
|
2
|
+
# Author:: Peter Kofler
|
3
|
+
class String
|
4
|
+
|
5
|
+
# Return the hex dump of this String with _columns_ columns of hexadecimal numbers per line.
|
6
|
+
def hexdump(columns=16)
|
7
|
+
return StringLineHexdumper.empty(columns).format if size == 0
|
8
|
+
|
9
|
+
input = [0, []]
|
10
|
+
output = scan(/[\x00-\xff]{1,#{columns}}/).inject(input) { |result, part|
|
11
|
+
offset, previous_lines = *result
|
12
|
+
|
13
|
+
line = StringLineHexdumper.new(offset, columns, part).format
|
14
|
+
|
15
|
+
[ offset + columns, previous_lines + [line] ]
|
16
|
+
}
|
17
|
+
offset, lines = *output
|
18
|
+
lines.join
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
# Dump a line of text as hex dump.
|
24
|
+
# Author:: Peter Kofler
|
25
|
+
class StringLineHexdumper
|
26
|
+
|
27
|
+
# Each displayed number is 2 nibbles, i.e. it's a byte.
|
28
|
+
NIBBLE_SIZE = 2
|
29
|
+
NIBBLE_FORMAT_STR = "%#{NIBBLE_SIZE}.#{NIBBLE_SIZE}X "
|
30
|
+
NIBBLE_WHITE_SPACE = ' ' * (NIBBLE_SIZE + 1)
|
31
|
+
|
32
|
+
# Factory method to create a formatter for an empty line with _columns_ length.
|
33
|
+
def self.empty(columns)
|
34
|
+
StringLineHexdumper.new(0, columns, '')
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(address, columns, data)
|
38
|
+
@address = address
|
39
|
+
@maxlen = columns
|
40
|
+
@data = data
|
41
|
+
end
|
42
|
+
|
43
|
+
def format
|
44
|
+
address = format_address
|
45
|
+
hexbytes = format_bytes
|
46
|
+
space = add_whitespace
|
47
|
+
display = strip_non_printable
|
48
|
+
|
49
|
+
"#{address}: #{hexbytes.join}#{space}; #{display}\n"
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# Format the address to a 8 digit hex number.
|
55
|
+
def format_address
|
56
|
+
sprintf('%8.8Xh', @address)
|
57
|
+
end
|
58
|
+
|
59
|
+
def format_bytes
|
60
|
+
@data.unpack('C' * @data.size).collect{ |c| format_byte(c) }
|
61
|
+
end
|
62
|
+
|
63
|
+
# Format the _bytes_ value to a +NIBBLE_SIZE+ digit hex number.
|
64
|
+
def format_byte(byte)
|
65
|
+
sprintf(NIBBLE_FORMAT_STR, byte)
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_whitespace
|
69
|
+
NIBBLE_WHITE_SPACE * (@maxlen - @data.size)
|
70
|
+
end
|
71
|
+
|
72
|
+
def strip_non_printable
|
73
|
+
@data.gsub(/[^ -\x7f]/, '.')
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
data/lib/javaclass/string_ux.rb
CHANGED
@@ -1,39 +1,50 @@
|
|
1
|
-
|
2
|
-
# Add some +unpack+ helper methods for HI-LO byte order (network byte order) contained in this string.
|
1
|
+
# Add some +unpack+ helper methods for HI-LO byte order (network byte order) contained in this String.
|
3
2
|
# Author:: Peter Kofler
|
4
3
|
class String
|
4
|
+
|
5
|
+
RUBY19 = ''.respond_to? :codepoints
|
5
6
|
|
6
7
|
# Return the _index_'th element as byte.
|
7
8
|
def u1(index=0)
|
8
|
-
|
9
|
+
if RUBY19
|
10
|
+
self[index..index].unpack('C')[0]
|
11
|
+
else
|
12
|
+
self[index]
|
13
|
+
end
|
9
14
|
end
|
10
|
-
|
15
|
+
|
11
16
|
# Return the _index_'th and the next element as unsigned word.
|
12
17
|
def u2(index=0)
|
13
18
|
self[index..index+1].unpack('n')[0]
|
14
|
-
#
|
19
|
+
# self[index]*256 + self[index+1]
|
15
20
|
end
|
16
|
-
|
21
|
+
|
22
|
+
# Return the _index_'th and the next element as unsigned word, repeat it for _count_
|
23
|
+
# words in total and return an array of these words.
|
24
|
+
def u2rep(count=1, index=0)
|
25
|
+
self[index...index+count*2].unpack('n'*count)
|
26
|
+
end
|
27
|
+
|
17
28
|
# Return the _index_'th and the next 3 elements as unsigned dword.
|
18
29
|
def u4(index=0)
|
19
30
|
self[index..index+3].unpack('N')[0]
|
20
31
|
end
|
21
|
-
|
32
|
+
|
22
33
|
# Return the _index_'th and the next 7 elements as unsigned qword.
|
23
34
|
def u8(index=0)
|
24
35
|
u4(index) * 256**4 + u4(index+4)
|
25
36
|
end
|
26
|
-
|
37
|
+
|
27
38
|
# Return the _index_'th and the next 3 elements as single precision float.
|
28
39
|
# See:: http://steve.hollasch.net/cgindex/coding/ieeefloat.html
|
29
40
|
# See:: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/196633
|
30
41
|
def single(index=0)
|
31
42
|
self[index..index+3].unpack('g')[0]
|
32
43
|
end
|
33
|
-
|
44
|
+
|
34
45
|
# Return the _index_'th and the next 7 elements as double precision float.
|
35
46
|
def double(index=0)
|
36
47
|
self[index..index+7].unpack('G')[0]
|
37
48
|
end
|
38
|
-
|
49
|
+
|
39
50
|
end
|
data/lib/javaclass.rb
CHANGED
@@ -1,47 +1,22 @@
|
|
1
|
-
require 'javaclass/
|
2
|
-
require 'javaclass/
|
3
|
-
require 'javaclass/
|
1
|
+
require 'javaclass/classpath/factory'
|
2
|
+
require 'javaclass/dsl/loader'
|
3
|
+
require 'javaclass/classscanner/scanners'
|
4
4
|
|
5
|
-
# Main
|
5
|
+
# Main namespace of JavaClass gem. The module also provides all basic methods
|
6
|
+
# for class file parsing as class methods. For its usage see
|
7
|
+
# {Basic Usage}[link:/files/lib/generated/examples/simple_usage_txt.html].
|
8
|
+
# For alternative usage see JavaClass::Dsl::Mixin.
|
6
9
|
# Author:: Peter Kofler
|
10
|
+
# Copyright:: Copyright (c) 2009, Peter Kofler.
|
11
|
+
# License:: {BSD License}[link:/files/license_txt.html]
|
7
12
|
module JavaClass
|
13
|
+
extend Classpath::Factory
|
14
|
+
extend Dsl::Loader
|
15
|
+
extend ClassScanner::Scanners
|
8
16
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def self.parse(filename)
|
15
|
-
warn 'Deprecated method JavaClass::parse will be removed in next release. Use method load_fs instead.'
|
16
|
-
load_fs(filename)
|
17
|
-
end
|
18
|
-
|
19
|
-
# Read and disassemble the given class _classname_ from _classpath_ .
|
20
|
-
def self.load_cp(classname, classpath)
|
21
|
-
disassemble(classpath.load_binary(classname))
|
22
|
-
end
|
23
|
-
|
24
|
-
# Read and disassemble the given class inside _data_ (byte data).
|
25
|
-
def self.disassemble(data)
|
26
|
-
ClassFile::JavaClassHeader.new(data)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Parse the given path variable _path_ and return a chain of class path elements.
|
30
|
-
def self.classpath(path)
|
31
|
-
full_classpath(nil, path)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Parse and scan the system classpath. Needs +JAVA_HOME+ set. Uses environment +CLASSPATH+ if set.
|
35
|
-
def self.environment_classpath
|
36
|
-
full_classpath(ENV['JAVA_HOME'], ENV['CLASSPATH'])
|
37
|
-
end
|
38
|
-
|
39
|
-
# Parse the given path variable _path_ and return a chain of class path elements together with _javahome_ if any.
|
40
|
-
def self.full_classpath(javahome, path='')
|
41
|
-
cp = Classpath::CompositeClasspath.new
|
42
|
-
cp.add_element(Classpath::JavaHomeClasspath.new(javahome)) if javahome
|
43
|
-
path.split(File::PATH_SEPARATOR).each { |cpe| cp.add_file_name(cpe) } if path
|
44
|
-
cp
|
45
|
-
end
|
17
|
+
def self.parse(filename)
|
18
|
+
warn 'Deprecated method JavaClass::parse will be removed in next release. Use method load_fs instead.'
|
19
|
+
load_fs(filename)
|
20
|
+
end
|
46
21
|
|
47
22
|
end
|
data/license.txt
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
=== BSD License
|
2
|
+
|
3
|
+
Copyright (c) 2009, Peter Kofler.
|
4
|
+
All rights reserved.
|
5
|
+
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
8
|
+
|
9
|
+
* Redistributions of source code must retain the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer.
|
11
|
+
|
12
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
14
|
+
and/or other materials provided with the distribution.
|
15
|
+
|
16
|
+
<b>
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
+
AND ANY EXPRESS OR IMPLIEDWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR APARTICULAR PURPOSE
|
20
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
21
|
+
LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF
|
23
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
+
INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OROTHERWISE)
|
26
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
+
POSSIBILITY OF SUCHDAMAGE.
|
28
|
+
</b>
|
data/planned.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
=== Planned
|
2
|
+
|
3
|
+
* add collecting of incoming references (mark my interfaces, mark my referenced classes)
|
4
|
+
* can calculate stability
|
5
|
+
* find interfaces with only 1 implementation (smell?)
|
6
|
+
|
7
|
+
* implement byte code awareness
|
8
|
+
* add the byte code sequences to the methods so it can be analysed later (see JVM spec)
|
9
|
+
* scanning of byte code for numbers, which methods loaded, which fields loaded
|
10
|
+
|
11
|
+
* test with a large set of classes
|
12
|
+
* use all classes of all JDKs against javap (compileTheWorld)
|
13
|
+
* use the Quality Corpus
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|