javaclass 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. data/Rakefile +208 -23
  2. data/Readme.txt +56 -19
  3. data/examples/generate_class_lists.rb +61 -0
  4. data/history.txt +13 -19
  5. data/lib/javaclass/classfile/access_flags.rb +52 -0
  6. data/lib/javaclass/classfile/class_magic.rb +29 -0
  7. data/lib/javaclass/classfile/class_version.rb +67 -0
  8. data/lib/javaclass/classfile/constant_pool.rb +91 -0
  9. data/lib/javaclass/classfile/constants/base.rb +33 -0
  10. data/lib/javaclass/classfile/constants/double_reference.rb +99 -0
  11. data/lib/javaclass/classfile/constants/single_reference.rb +65 -0
  12. data/lib/javaclass/classfile/constants/value.rb +116 -0
  13. data/lib/javaclass/classfile/java_class_header.rb +102 -0
  14. data/lib/javaclass/classfile/references.rb +43 -0
  15. data/lib/javaclass/classlist/class_entry.rb +89 -0
  16. data/lib/javaclass/classlist/jar_searcher.rb +69 -0
  17. data/lib/javaclass/classlist/list.rb +126 -0
  18. data/lib/javaclass/classlist/package_entry.rb +87 -0
  19. data/lib/javaclass/classpath/classpaths.txt +2 -0
  20. data/lib/javaclass/classpath/composite_classpath.rb +99 -0
  21. data/lib/javaclass/classpath/folder_classpath.rb +83 -0
  22. data/lib/javaclass/classpath/jar_classpath.rb +100 -0
  23. data/lib/javaclass/classpath/java_home_classpath.rb +40 -0
  24. data/lib/javaclass/classpath/port_ClassPathEntry.java +202 -0
  25. data/lib/javaclass/classpath/port_ClassPathEntryFactory.java +311 -0
  26. data/lib/javaclass/classpath/port_DirectoryRepository.java +24 -0
  27. data/lib/javaclass/java_name.rb +90 -0
  28. data/lib/javaclass/metric/ccd.rb +68 -0
  29. data/lib/javaclass/metric/class_usage.rb +41 -0
  30. data/lib/javaclass/metric/metrics.txt +15 -0
  31. data/lib/javaclass.rb +44 -11
  32. data/test/data/ShortClientData$1-4000Wert.class +0 -0
  33. data/test/data/{AccessFlagsTestAbstract.class → access_flags/AccessFlagsTestAbstract.class} +0 -0
  34. data/test/data/{AccessFlagsTestAbstract.java → access_flags/AccessFlagsTestAbstract.java} +0 -0
  35. data/test/data/{AccessFlagsTestFinal.class → access_flags/AccessFlagsTestFinal.class} +0 -0
  36. data/test/data/{AccessFlagsTestFinal.java → access_flags/AccessFlagsTestFinal.java} +0 -0
  37. data/test/data/{AccessFlagsTestInterface.class → access_flags/AccessFlagsTestInterface.class} +0 -0
  38. data/test/data/{AccessFlagsTestInterface.java → access_flags/AccessFlagsTestInterface.java} +0 -0
  39. data/test/data/{AccessFlagsTestPackage.class → access_flags/AccessFlagsTestPackage.class} +0 -0
  40. data/test/data/{AccessFlagsTestPackage.java → access_flags/AccessFlagsTestPackage.java} +0 -0
  41. data/test/data/access_flags/AccessFlagsTestPublic$Inner.class +0 -0
  42. data/test/data/access_flags/AccessFlagsTestPublic$InnerInterface.class +0 -0
  43. data/test/data/access_flags/AccessFlagsTestPublic$StaticInner.class +0 -0
  44. data/test/data/access_flags/AccessFlagsTestPublic.class +0 -0
  45. data/test/data/access_flags/AccessFlagsTestPublic.java +11 -0
  46. data/test/data/access_flags/AccessFlagsTestPublic_javap.txt +29 -0
  47. data/test/data/{makeAccessFlagsTest.bat → access_flags/make.bat} +0 -0
  48. data/test/data/{ClassVersionTest.java → class_version/ClassVersionTest.java} +0 -0
  49. data/test/data/{ClassVersionTest10.class → class_version/ClassVersionTest10.class} +0 -0
  50. data/test/data/{ClassVersionTest11.class → class_version/ClassVersionTest11.class} +0 -0
  51. data/test/data/{ClassVersionTest12.class → class_version/ClassVersionTest12.class} +0 -0
  52. data/test/data/{ClassVersionTest13.class → class_version/ClassVersionTest13.class} +0 -0
  53. data/test/data/{ClassVersionTest14.class → class_version/ClassVersionTest14.class} +0 -0
  54. data/test/data/{ClassVersionTest15.class → class_version/ClassVersionTest15.class} +0 -0
  55. data/test/data/{ClassVersionTest16.class → class_version/ClassVersionTest16.class} +0 -0
  56. data/test/data/{makeClassVersionTest.bat → class_version/make.bat} +0 -0
  57. data/test/data/{ConstantPoolTest.class → constant_pool/ConstantPoolTest.class} +0 -0
  58. data/test/data/{ConstantPoolTest.java → constant_pool/ConstantPoolTest.java} +0 -0
  59. data/test/data/{makeConstantPoolTest.bat → constant_pool/make.bat} +0 -0
  60. data/test/data/folder_classpath/JarClasspathTestFolder/ClassVersionTest10.class +0 -0
  61. data/test/data/folder_classpath/JarClasspathTestFolder/package/ClassVersionTest11.class +0 -0
  62. data/test/data/jar_classpath/JarClasspathTest.jar +0 -0
  63. data/test/data/jar_classpath/JarClasspathTest.zip +0 -0
  64. data/test/data/jar_classpath/JarClasspathTestManifest.jar +0 -0
  65. data/test/data/jar_classpath/JarClasspathTestMultiManifest.jar +0 -0
  66. data/test/data/jar_classpath/make.bat +24 -0
  67. data/test/data/jar_searcher/JarClassListTest.jar +0 -0
  68. data/test/data/jar_searcher/PublicClass.java +12 -0
  69. data/test/data/jar_searcher/PublicInterface.java +5 -0
  70. data/test/data/jar_searcher/make.bat +13 -0
  71. data/test/data/java_home_classpath/jdk/jre/lib/rt.jar +0 -0
  72. data/test/data/java_home_classpath/jre/lib/rt.jar +0 -0
  73. data/test/data/java_home_classpath/jre-ext/lib/ext/ext.jar +0 -0
  74. data/test/data/java_home_classpath/jre-ext/lib/rt.jar +0 -0
  75. data/test/data/java_home_classpath/make.bat +13 -0
  76. data/test/data/references/ReferencesTest.class +0 -0
  77. data/test/data/references/ReferencesTest.java +12 -0
  78. data/test/data/references/make.bat +5 -0
  79. data/test/setup.rb +6 -5
  80. data/test/test_access_flags.rb +59 -44
  81. data/test/test_base.rb +20 -15
  82. data/test/test_class_entry.rb +198 -0
  83. data/test/test_class_version.rb +48 -46
  84. data/test/test_composite_classpath.rb +68 -0
  85. data/test/test_constant_pool.rb +49 -41
  86. data/test/test_folder_classpath.rb +45 -0
  87. data/test/test_jar_classpath.rb +57 -0
  88. data/test/test_jar_searcher.rb +93 -0
  89. data/test/test_java_class_header.rb +34 -22
  90. data/test/test_java_home_classpath.rb +50 -0
  91. data/test/test_java_name.rb +110 -0
  92. data/test/test_javaclass.rb +22 -0
  93. data/test/test_list.rb +123 -0
  94. data/test/test_package_entry.rb +91 -0
  95. data/test/test_references.rb +38 -20
  96. data/test/test_string_ux.rb +99 -2
  97. data/test/ts_all_tests.rb +42 -21
  98. metadata +171 -50
  99. data/lib/javaclass/access_flags.rb +0 -44
  100. data/lib/javaclass/class_magic.rb +0 -27
  101. data/lib/javaclass/class_version.rb +0 -65
  102. data/lib/javaclass/constant_pool.rb +0 -85
  103. data/lib/javaclass/constants/base.rb +0 -31
  104. data/lib/javaclass/constants/double_reference.rb +0 -81
  105. data/lib/javaclass/constants/single_reference.rb +0 -58
  106. data/lib/javaclass/constants/value.rb +0 -114
  107. data/lib/javaclass/java_class_header.rb +0 -88
  108. data/lib/javaclass/references.rb +0 -31
  109. data/test/data/AccessFlagsTestPublic$InnerClass.class +0 -0
  110. data/test/data/AccessFlagsTestPublic.class +0 -0
  111. data/test/data/AccessFlagsTestPublic.java +0 -7
@@ -1,58 +0,0 @@
1
- require 'javaclass/constants/base'
2
-
3
- module JavaClass
4
- module Constants # :nodoc:
5
-
6
- # Superclass of single reference constants like +ConstantClass+ (+Class+) in the constant pool.
7
- # Author:: Peter Kofler
8
- class SingleReference < Base
9
-
10
- attr_reader :first_index
11
-
12
- # Define a single reference into _pool_ from _data_ beginning at _start_
13
- def initialize(pool, data, start, name=nil)
14
- super(name)
15
- @tag = data.u1(start)
16
-
17
- @enclosing_pool = pool
18
- @first_index = data.u2(start+1)
19
- end
20
-
21
- # Return the value, which is the referenced value from the pool.
22
- def first_value
23
- get(@first_index)
24
- end
25
- alias to_s first_value
26
-
27
- # Return part of debug output.
28
- def dump
29
- super + "##{@first_index};\t// #{to_s}"
30
- end
31
-
32
- protected
33
-
34
- # Get a reference _ref_ from the +enclosing_pool+
35
- def get(ref)
36
- @enclosing_pool[ref].to_s
37
- end
38
-
39
- end
40
-
41
- class ConstantClass < SingleReference
42
- alias name_index first_index
43
- def initialize(pool, data, start)
44
- super(pool, data, start, "class")
45
- end
46
- alias class_name first_value
47
- end
48
-
49
- class ConstantString < SingleReference
50
- alias string_index first_index
51
- def initialize(pool, data, start)
52
- super(pool, data, start)
53
- end
54
- alias string_value first_value
55
- end
56
-
57
- end
58
- end
@@ -1,114 +0,0 @@
1
- require 'javaclass/constants/base'
2
-
3
- module JavaClass
4
- module Constants # :nodoc:
5
-
6
- # Superclass of value constants like +ConstantInt+ (+Integer+) in the constant pool.
7
- # Author:: Peter Kofler
8
- class Value < Base
9
-
10
- attr_reader :value
11
-
12
- # Create a constant value with an optional downcase _name_
13
- def initialize(name=self.class.to_s[/::[^:]+$/][10..-1].downcase)
14
- super(name)
15
- end
16
-
17
- # Return the value as string.
18
- def to_s
19
- @value.to_s
20
- end
21
-
22
- # Return part of debug output.
23
- def dump
24
- super + "#{@value}"
25
- end
26
-
27
- protected
28
-
29
- # Define a +value+ from _data_ beginning at position _start_ with the _size_ in bytes and _slots_ (1 or 2).
30
- def get_value(data, start, size, slots=1)
31
- @tag = data.u1(start)
32
- @size = size
33
- @slots = slots
34
-
35
- data[start+1..start+size-1]
36
- end
37
-
38
- # Dummy method to "fix" unused warning of param _pool_ in Eclipse.
39
- def silence_unused_warning(pool)
40
- raise "pool is nil" unless pool
41
- end
42
-
43
- end
44
-
45
- class ConstantInt < Value
46
- def initialize(pool, data, start)
47
- super()
48
- silence_unused_warning(pool)
49
- @value = get_value(data, start, 5).u4
50
- end
51
-
52
- def dump
53
- super + ';'
54
- end
55
- end
56
-
57
- class ConstantFloat < Value
58
- def initialize(pool, data, start)
59
- super()
60
- silence_unused_warning(pool)
61
- @value = get_value(data, start, 5).single
62
- end
63
- def to_s
64
- super.upcase # sprintf('%E',@value)
65
- end
66
- def dump
67
- super + 'f;'
68
- end
69
- end
70
-
71
- class ConstantLong < Value
72
- def initialize(pool, data, start)
73
- super()
74
- silence_unused_warning(pool)
75
- @value = get_value(data, start, 9, 2).u8
76
- end
77
- def dump
78
- super + 'l;'
79
- end
80
- end
81
-
82
- class ConstantDouble < Value
83
- def initialize(pool, data, start)
84
- super()
85
- silence_unused_warning(pool)
86
- @value = get_value(data, start, 9, 2).double
87
- end
88
- def to_s
89
- @value.to_s.upcase # sprintf('%E',@value)
90
- end
91
- def dump
92
- super + 'd;'
93
- end
94
- end
95
-
96
- class ConstantAsciz < Value
97
- alias string value
98
- def initialize(pool, data, start)
99
- super('Asciz')
100
- silence_unused_warning(pool)
101
- @tag = data.u1(start)
102
-
103
- @length = data.u2(start+1)
104
- @size = 3 + @length
105
- @value = data[start+3..start+3+@length-1]
106
- end
107
-
108
- def dump
109
- super + ';'
110
- end
111
- end
112
-
113
- end
114
- end
@@ -1,88 +0,0 @@
1
- require 'javaclass/string_ux'
2
- require 'javaclass/class_magic'
3
- require 'javaclass/class_version'
4
- require 'javaclass/constant_pool'
5
- require 'javaclass/references'
6
- require 'javaclass/access_flags'
7
-
8
- module JavaClass
9
-
10
- # Provide all information of a Java class file.
11
- # Author:: Peter Kofler
12
- class JavaClassHeader
13
-
14
- attr_reader :magic
15
- attr_reader :version
16
- attr_reader :constant_pool
17
- attr_reader :access_flags
18
- attr_reader :references
19
-
20
- # Create a header with the binary _data_ from the class file.
21
- def initialize(data)
22
-
23
- # ClassFile {
24
- # u4 magic;
25
- # u2 minor_version;
26
- # u2 major_version;
27
- # u2 constant_pool_count;
28
- # cp_info constant_pool[constant_pool_count-1];
29
- # u2 access_flags;
30
- # u2 this_class;
31
- # u2 super_class;
32
- # u2 interfaces_count;
33
- # u2 interfaces[interfaces_count];
34
- # u2 fields_count;
35
- # field_info fields[fields_count];
36
- # u2 methods_count;
37
- # method_info methods[methods_count];
38
- # u2 attributes_count;
39
- # attribute_info attributes[attributes_count];
40
- # }
41
-
42
- @magic = ClassMagic.new(data)
43
- @version = ClassVersion.new(data)
44
-
45
- @constant_pool = ConstantPool.new(data)
46
- pos = 8 + @constant_pool.size
47
-
48
- @access_flags = AccessFlags.new(data, pos)
49
- pos += 2
50
-
51
- idx = data.u2(pos)
52
- pos += 2
53
- @this_class_idx = idx
54
-
55
- @references = References.new(@constant_pool, @this_class_idx)
56
-
57
- idx = data.u2(pos)
58
- pos += 2
59
- @super_class_idx = idx
60
- end
61
-
62
- # Return the name of this class.
63
- def this_class
64
- @constant_pool[@this_class_idx].to_s
65
- end
66
-
67
- # Return the name of the superclass of this class or +nil+.
68
- def super_class
69
- if @super_class_idx>0
70
- @constant_pool[@super_class_idx].to_s
71
- else
72
- nil
73
- end
74
- end
75
-
76
- # Return a debug output of this class that looks similar to +javap+ output.
77
- def dump
78
- d = []
79
- # dump << " SourceFile: \"#{@value}\""
80
- # dump << "Compiled from \"#{@value}\""
81
- d += @version.dump
82
- d += @constant_pool.dump
83
- d
84
- end
85
-
86
- end
87
-
88
- end
@@ -1,31 +0,0 @@
1
- require 'javaclass/constant_pool'
2
-
3
- module JavaClass
4
-
5
- # Container class for list of all classes, methods and fields referenced by this class.
6
- # Author:: Peter Kofler
7
- class References
8
-
9
- # Create a references container with the constant _pool_ and skip references to _classidx_ which is the host class itself.
10
- def initialize(pool, classidx)
11
- @constant_pool = pool
12
- @class_idx = classidx
13
- end
14
-
15
- # Return the constants referring to fields (Constants::ConstantField).
16
- # If _includeown_ is +true+ then fields of this class are returned also.
17
- def referenced_fields(includeown=false)
18
- @constant_pool.find(ConstantPool::FIELD_TAG).find_all { |field| includeown || field.class_index != @class_idx }
19
- end
20
-
21
- # Return the constants referring to methods (Constants::ConstantMethod) in classes or interfaces.
22
- # If _includeown_ is +true+ then methods of this class are returned also.
23
- def referenced_methods(includeown=false)
24
- @constant_pool.find(ConstantPool::METHOD_TAG, ConstantPool::INTERFACE_METHOD_TAG).find_all do |method|
25
- includeown || method.class_index != @class_idx
26
- end
27
- end
28
-
29
- end
30
-
31
- end
Binary file
@@ -1,7 +0,0 @@
1
- package packagename;
2
-
3
- public class AccessFlagsTestPublic {
4
-
5
- class InnerClass { }
6
-
7
- }