javaclass 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
+ }