javaclass 0.0.3 → 0.0.4
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 +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
|