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.
Files changed (175) hide show
  1. data/Rakefile +67 -56
  2. data/Readme.txt +42 -39
  3. data/example_task.rb +172 -0
  4. data/examples/check_interface_names.rb +44 -0
  5. data/examples/corpus.rb +19 -0
  6. data/examples/count_classes_in_modules.rb +38 -0
  7. data/examples/cumulative_dependencies.rb +39 -0
  8. data/examples/find_all_imported_types.rb +44 -0
  9. data/examples/find_referenced_modules.rb +53 -0
  10. data/examples/find_unreferenced_classes.rb +65 -0
  11. data/examples/generate_class_lists.rb +67 -43
  12. data/examples/profiler_scratchpad.rb +33 -0
  13. data/examples/simple_usage.rb +42 -0
  14. data/history.txt +29 -7
  15. data/javaclass.gemspec +31 -0
  16. data/lib/javaclass/adder_tree.rb +92 -0
  17. data/lib/javaclass/analyse/dependencies.rb +52 -0
  18. data/lib/javaclass/{metric/metrics.txt → analyse/ideas.txt} +2 -2
  19. data/lib/javaclass/analyse/transitive_dependencies.rb +52 -0
  20. data/lib/javaclass/classfile/access_flag_constants.rb +24 -0
  21. data/lib/javaclass/classfile/access_flags.rb +49 -26
  22. data/lib/javaclass/classfile/class_format_error.rb +37 -0
  23. data/lib/javaclass/classfile/class_magic.rb +16 -8
  24. data/lib/javaclass/classfile/class_version.rb +19 -25
  25. data/lib/javaclass/classfile/constant_pool.rb +110 -45
  26. data/lib/javaclass/classfile/constants/base.rb +33 -12
  27. data/lib/javaclass/classfile/constants/double_reference.rb +55 -41
  28. data/lib/javaclass/classfile/constants/single_reference.rb +29 -21
  29. data/lib/javaclass/classfile/constants/value.rb +43 -33
  30. data/lib/javaclass/classfile/java_class_header.rb +72 -46
  31. data/lib/javaclass/classfile/java_class_header_as_java_name.rb +33 -0
  32. data/lib/javaclass/classfile/java_class_header_shortcuts.rb +19 -0
  33. data/lib/javaclass/classfile/references.rb +21 -19
  34. data/lib/javaclass/classlist/class_entry.rb +26 -27
  35. data/lib/javaclass/classlist/jar_searcher.rb +34 -25
  36. data/lib/javaclass/classlist/list.rb +31 -31
  37. data/lib/javaclass/classlist/package_entry.rb +25 -24
  38. data/lib/javaclass/classpath/any_classpath.rb +48 -0
  39. data/lib/javaclass/classpath/class_not_found_error.rb +20 -0
  40. data/lib/javaclass/classpath/classpaths.txt +2 -2
  41. data/lib/javaclass/classpath/composite_classpath.rb +56 -54
  42. data/lib/javaclass/classpath/convention_classpath.rb +38 -0
  43. data/lib/javaclass/classpath/eclipse_classpath.rb +74 -0
  44. data/lib/javaclass/classpath/factory.rb +65 -0
  45. data/lib/javaclass/classpath/file_classpath.rb +47 -0
  46. data/lib/javaclass/classpath/folder_classpath.rb +42 -44
  47. data/lib/javaclass/classpath/jar_classpath.rb +91 -52
  48. data/lib/javaclass/classpath/java_home_classpath.rb +24 -13
  49. data/lib/javaclass/classpath/maven_classpath.rb +44 -0
  50. data/lib/javaclass/classpath/temporary_unpacker.rb +111 -0
  51. data/lib/javaclass/classpath/tracking_classpath.rb +144 -0
  52. data/lib/javaclass/classscanner/ideas.txt +3 -0
  53. data/lib/javaclass/classscanner/imported_types.rb +29 -0
  54. data/lib/javaclass/classscanner/scanners.rb +29 -0
  55. data/lib/javaclass/delegate_directive.rb +15 -0
  56. data/lib/javaclass/dsl/caching_classpath.rb +38 -0
  57. data/lib/javaclass/dsl/classpath_analysers.rb +27 -0
  58. data/lib/javaclass/dsl/java_name_factory.rb +79 -0
  59. data/lib/javaclass/dsl/loader.rb +42 -0
  60. data/lib/javaclass/dsl/loading_classpath.rb +53 -0
  61. data/lib/javaclass/dsl/mixin.rb +54 -0
  62. data/lib/javaclass/gems/zip_file.rb +154 -0
  63. data/lib/javaclass/java_language.rb +50 -0
  64. data/lib/javaclass/java_name.rb +329 -55
  65. data/lib/javaclass/java_name_scanner.rb +95 -0
  66. data/lib/javaclass/resources/iso_3166_countries.txt +240 -0
  67. data/lib/javaclass/resources/jdk0_packages.txt +6 -0
  68. data/lib/javaclass/resources/jdk1_packages.txt +6 -0
  69. data/lib/javaclass/resources/jdk2_packages.txt +4 -0
  70. data/lib/javaclass/resources/jdk3_packages.txt +6 -0
  71. data/lib/javaclass/resources/jdk4_packages.txt +22 -0
  72. data/lib/javaclass/resources/jdk5_packages.txt +5 -0
  73. data/lib/javaclass/resources/jdk6_packages.txt +7 -0
  74. data/lib/javaclass/resources/jdk7_packages.txt +0 -0
  75. data/lib/javaclass/resources/jdk_packages.txt +53 -0
  76. data/lib/javaclass/resources/reserved_words.txt +50 -0
  77. data/lib/javaclass/string_hexdump.rb +76 -0
  78. data/lib/javaclass/string_ux.rb +21 -10
  79. data/lib/javaclass.rb +16 -41
  80. data/license.txt +28 -0
  81. data/planned.txt +13 -0
  82. data/test/data/Object_102.class +0 -0
  83. data/test/data/Runnable_102.class +0 -0
  84. data/test/data/access_flags/AccessFlagsTestAnnotation.class +0 -0
  85. data/test/data/access_flags/AccessFlagsTestAnnotation.java +3 -0
  86. data/test/data/access_flags/AccessFlagsTestEnum$1.class +0 -0
  87. data/test/data/access_flags/AccessFlagsTestEnum.class +0 -0
  88. data/test/data/access_flags/AccessFlagsTestEnum.java +6 -0
  89. data/test/data/access_flags/AccessFlagsTestInner$1.class +0 -0
  90. data/test/data/access_flags/AccessFlagsTestInner$2.class +0 -0
  91. data/test/data/access_flags/AccessFlagsTestInner.class +0 -0
  92. data/test/data/access_flags/AccessFlagsTestInner.java +13 -0
  93. data/test/data/access_flags/AccessFlagsTestPackage.class +0 -0
  94. data/test/data/access_flags/AccessFlagsTestPackage.java +1 -1
  95. data/test/data/api/packagename/AccessFlagsTestPublic.class +0 -0
  96. data/test/data/class_version/ClassVersionTest17.class +0 -0
  97. data/test/data/class_version/make.bat +6 -2
  98. data/test/data/eclipse_classpath/classes/ClassVersionTest12.class +0 -0
  99. data/test/data/eclipse_classpath/lib/JarClasspathTest.jar +0 -0
  100. data/test/data/eclipse_classpath/test-classes/ClassVersionTest13.class +0 -0
  101. data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/ClassVersionTest10.class +0 -0
  102. data/test/data/folder_classpath/{JarClasspathTestFolder → classes}/package/ClassVersionTest11.class +0 -0
  103. data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
  104. data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
  105. data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
  106. data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
  107. data/test/data/jar_classpath/make.bat +6 -2
  108. data/test/data/jar_searcher/BrokenRunnable_102.class +0 -0
  109. data/test/data/java_home_classpath/jdk118/lib/classes.zip +0 -0
  110. data/test/data/java_name_scanner/META-INF/MANIFEST.MF +12 -0
  111. data/test/data/java_name_scanner/plugin.xml +18 -0
  112. data/test/data/maven_classpath/module/pom.xml +8 -0
  113. data/test/data/maven_classpath/module/target/classes/ClassVersionTest12.class +0 -0
  114. data/test/data/maven_classpath/pom.xml +8 -0
  115. data/test/data/maven_classpath/target/classes/ClassVersionTest10.class +0 -0
  116. data/test/data/maven_classpath/target/test-classes/ClassVersionTest11.class +0 -0
  117. data/test/data/transitive_dependencies/A.class +0 -0
  118. data/test/data/transitive_dependencies/A.java +5 -0
  119. data/test/data/transitive_dependencies/B.class +0 -0
  120. data/test/data/transitive_dependencies/B.java +3 -0
  121. data/test/data/transitive_dependencies/C.class +0 -0
  122. data/test/data/transitive_dependencies/C.java +3 -0
  123. data/test/data/transitive_dependencies/Start.class +0 -0
  124. data/test/data/transitive_dependencies/Start.java +4 -0
  125. data/test/data/transitive_dependencies/make.bat +3 -0
  126. data/test/data/zip_file/commons-math-2.2-broken.zip +0 -0
  127. data/test/data/zip_file/regenerated-with-7zip.zip +0 -0
  128. data/test/data/zip_file/regenerated-with-jar.zip +0 -0
  129. data/test/dot_classpath.rb +33 -0
  130. data/test/logging_folder_classpath.rb +19 -0
  131. data/test/setup.rb +1 -1
  132. data/test/test_access_flags.rb +58 -32
  133. data/test/test_adder_tree.rb +78 -0
  134. data/test/test_any_classpath.rb +39 -0
  135. data/test/test_base.rb +9 -7
  136. data/test/test_caching_classpath.rb +41 -0
  137. data/test/test_class_entry.rb +60 -60
  138. data/test/test_class_magic.rb +31 -0
  139. data/test/test_class_version.rb +25 -25
  140. data/test/test_composite_classpath.rb +22 -23
  141. data/test/test_constant_pool.rb +37 -13
  142. data/test/test_convention_classpath.rb +39 -0
  143. data/test/test_eclipse_classpath.rb +73 -0
  144. data/test/test_factory.rb +61 -0
  145. data/test/test_folder_classpath.rb +26 -10
  146. data/test/test_imported_types.rb +34 -0
  147. data/test/test_jar_classpath.rb +29 -14
  148. data/test/test_jar_searcher.rb +27 -14
  149. data/test/test_java_class_header.rb +22 -10
  150. data/test/test_java_class_header_as_java_name.rb +41 -0
  151. data/test/test_java_home_classpath.rb +17 -11
  152. data/test/test_java_name.rb +204 -64
  153. data/test/test_java_name_factory.rb +52 -0
  154. data/test/test_java_name_scanner.rb +24 -0
  155. data/test/test_javaclass_api.rb +43 -0
  156. data/test/test_list.rb +58 -44
  157. data/test/test_load_directive.rb +34 -0
  158. data/test/test_maven_classpath.rb +46 -0
  159. data/test/test_package_entry.rb +27 -22
  160. data/test/test_references.rb +14 -14
  161. data/test/test_string_hexdump.rb +24 -0
  162. data/test/test_string_ux.rb +18 -106
  163. data/test/test_tracking_classpath.rb +112 -0
  164. data/test/test_transitive_dependencies.rb +31 -0
  165. data/test/test_unpacking_jar_classpath.rb +43 -0
  166. data/test/test_zip_file.rb +33 -0
  167. data/test/ts_all_tests.rb +80 -18
  168. data/thanks.txt +2 -0
  169. metadata +151 -22
  170. data/lib/javaclass/classpath/port_ClassPathEntry.java +0 -202
  171. data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +0 -311
  172. data/lib/javaclass/classpath/port_DirectoryRepository.java +0 -24
  173. data/lib/javaclass/metric/ccd.rb +0 -68
  174. data/lib/javaclass/metric/class_usage.rb +0 -41
  175. 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,6 @@
1
+ java.lang
2
+ java.applet
3
+ java.awt
4
+ java.io
5
+ java.net
6
+ java.util
@@ -0,0 +1,6 @@
1
+ java.beans
2
+ java.math
3
+ java.rmi
4
+ java.security
5
+ java.sql
6
+ java.text
@@ -0,0 +1,4 @@
1
+ javax.accessibility
2
+ javax.swing
3
+ org.omg.CORBA
4
+ org.omg.CosNaming
@@ -0,0 +1,6 @@
1
+ javax.naming
2
+ javax.rmi
3
+ javax.sound
4
+ javax.transaction
5
+ org.omg.CORBA_2_3
6
+ org.omg.SendingContext
@@ -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
@@ -0,0 +1,5 @@
1
+ javax.activity
2
+ javax.jnlp
3
+ javax.management
4
+ javax.security.sasl
5
+ javax.xml
@@ -0,0 +1,7 @@
1
+ javax.activation
2
+ javax.annotation
3
+ javax.jws
4
+ javax.lang.model
5
+ javax.script
6
+ javax.smartcardio
7
+ javax.tools
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
@@ -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
- self[index]
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
- # same as self[index]*256 + self[index+1]
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/classfile/java_class_header'
2
- require 'javaclass/classpath/java_home_classpath'
3
- require 'javaclass/classpath/composite_classpath'
1
+ require 'javaclass/classpath/factory'
2
+ require 'javaclass/dsl/loader'
3
+ require 'javaclass/classscanner/scanners'
4
4
 
5
- # Main entry point for class file parsing.
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
- # Read and disassemble the given class from _filename_ (full file name).
10
- def self.load_fs(filename)
11
- disassemble(File.open(filename, 'rb') { |io| io.read } )
12
- end
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
@@ -0,0 +1,3 @@
1
+ package packagename;
2
+
3
+ public @interface AccessFlagsTestAnnotation { }
@@ -0,0 +1,6 @@
1
+ package packagename;
2
+
3
+ public enum AccessFlagsTestEnum {
4
+ Value,
5
+ Inner { }
6
+ }
@@ -0,0 +1,13 @@
1
+ package packagename;
2
+
3
+ public class AccessFlagsTestInner {
4
+
5
+ private Runnable anonymous = new Runnable() {
6
+ public void run() { }
7
+ };
8
+
9
+ private static Runnable staticAnonymous = new Runnable() {
10
+ public void run() { }
11
+ };
12
+
13
+ }