C0 code coverage information
Generated on Wed Aug 01 14:04:26 -0300 2007 with rcov 0.8.0
Code reported as executed by Ruby looks like this...
and this: this line is also marked as covered.
Lines considered as run by rcov, but not reported by Ruby, look like this,
and this: these lines were inferred by rcov (using simple heuristics).
Finally, here's a line marked as not executed.
1 require 'utils'
2 require 'pool_helper'
3
4 module YAJD
5
6 module ConstantPool
7
8 class CPInfo
9
10 protected
11 def initialize(pool, tag)
def initialize(pool, tag)
978 lib/constant_pool/strings.rb:35 in 'YAJD::ConstantPool::CUTF8Info#initialize'
390 lib/constant_pool/cpinfo.rb:147 in 'YAJD::ConstantPool::CommonAttrs#initialize'
286 lib/constant_pool/cpinfo.rb:130 in 'YAJD::ConstantPool::CNameType#initialize'
260 lib/constant_pool/numbers.rb:36 in 'YAJD::ConstantPool::CLongDouble#initialize'
82 lib/constant_pool/cpinfo.rb:78 in 'YAJD::ConstantPool::CClass#initialize'
47 lib/constant_pool/strings.rb:14 in 'YAJD::ConstantPool::CString#initialize'
9 lib/constant_pool/numbers.rb:7 in 'YAJD::ConstantPool::CIntegerFloat#initialize'
12 @tag = tag
13 @pool = pool
14 end
15
16 CLASS = 7
17 FIELD_REF = 9
18 METHOD_REF = 10
19 I_METHOD_REF = 11
20 STRING = 8
21 INTEGER = 3
22 FLOAT = 4
23 LONG = 5
24 DOUBLE = 6
25 NAME_AND_TYPE = 12
26 UTF8 = 1
27
28 #TODO make it work using the class name (e.g.: CLASS => CClass)
29 Classes = {
30 CLASS => 'CClass',
31 FIELD_REF => 'CFieldRef',
32 METHOD_REF => 'CMethodRef',
33 I_METHOD_REF => 'CIMethodRef',
34 STRING => 'CString',
35 INTEGER => 'CInteger',
36 FLOAT => 'CFloat',
37 LONG => 'CLong',
38 DOUBLE => 'CDouble',
39 NAME_AND_TYPE => 'CNameType',
40 UTF8 => 'CUTF8Info'
41 }
42
43 def check_ref_utf(constant_pool, idx)
def check_ref_utf(constant_pool, idx)
264 lib/constant_pool/cpinfo.rb:138 in 'YAJD::ConstantPool::CNameType#validate'
53 lib/constant_pool/cpinfo.rb:85 in 'YAJD::ConstantPool::CClass#validate'
39 lib/constant_pool/strings.rb:23 in 'YAJD::ConstantPool::CString#validate'
44 check_reference(constant_pool, idx, CPInfo::UTF8)
check_reference(constant_pool, idx, CPInfo::UTF8)
356 YAJD::ConstantPool::CPInfo#check_reference at lib/constant_pool/cpinfo.rb:49
45 end
46 def check_ref_class(constant_pool, idx)
def check_ref_class(constant_pool, idx)
368 lib/constant_pool/cpinfo.rb:155 in 'YAJD::ConstantPool::CommonAttrs#validate'
47 check_reference(constant_pool, idx, CPInfo::CLASS)
check_reference(constant_pool, idx, CPInfo::CLASS)
368 YAJD::ConstantPool::CPInfo#check_reference at lib/constant_pool/cpinfo.rb:49
48 end
49 def check_reference(constant_pool, idx, expected_tag)
def check_reference(constant_pool, idx, expected_tag)
368 lib/constant_pool/cpinfo.rb:47 in 'YAJD::ConstantPool::CPInfo#check_ref_class'
356 lib/constant_pool/cpinfo.rb:44 in 'YAJD::ConstantPool::CPInfo#check_ref_utf'
200 lib/constant_pool/cpinfo.rb:169 in 'YAJD::ConstantPool::CMethodRef#validate'
155 lib/constant_pool/cpinfo.rb:187 in 'YAJD::ConstantPool::CIMethodRef#validate'
13 lib/constant_pool/cpinfo.rb:178 in 'YAJD::ConstantPool::CFieldRef#validate'
50 obj = constant_pool.at(idx)
obj = constant_pool.at(idx)
1092 YAJD::ConstantPool::Pool#at at lib/constant_pool.rb:42
51 if obj.nil?
52 raise(ValidationError, "invalid constant pool index #{idx}")
53 end
54 if obj.tag != expected_tag
55 raise(ValidationError, "invalid structure at #{idx} (needed #{expected_tag}, was #{obj.tag})")
56 end
57 end
58
59 public
60 attr_reader :tag
61
62 def self.create_instance(pool, f)
def self.create_instance(pool, f)
2052 lib/constant_pool.rb:21 in 'YAJD::ConstantPool::Pool#initialize'
63 tag = f.read_u1
tag = f.read_u1
2052 File#read_u1 at lib/ext/file.rb:6
64 klass = Classes[tag]
65 raise "unknown tag (#{tag})" if klass.nil?
66 result = eval(klass).new(pool, tag, f)
result = eval(klass).new(pool, tag, f)
978 YAJD::ConstantPool::CUTF8Info#initialize at lib/constant_pool/strings.rb:34
390 YAJD::ConstantPool::CommonAttrs#initialize at lib/constant_pool/cpinfo.rb:146
286 YAJD::ConstantPool::CNameType#initialize at lib/constant_pool/cpinfo.rb:129
260 YAJD::ConstantPool::CLongDouble#initialize at lib/constant_pool/numbers.rb:35
82 YAJD::ConstantPool::CClass#initialize at lib/constant_pool/cpinfo.rb:77
47 YAJD::ConstantPool::CString#initialize at lib/constant_pool/strings.rb:13
7 YAJD::ConstantPool::CInteger#initialize at lib/constant_pool/numbers.rb:21
2 YAJD::ConstantPool::CIntegerFloat#initialize at lib/constant_pool/numbers.rb:6
67
68 result
69 end
70
71 def validate(constant_pool)
72 raise(ValidationError, "non implemented validation for #{self.class}")
73 end
74 end
75
76 class CClass < CPInfo
77 def initialize(pool, tag, f)
def initialize(pool, tag, f)
82 lib/constant_pool/cpinfo.rb:66 in '#<Class:YAJD::ConstantPool::CPInfo>#create_instance'
78 super(pool, tag)
super(pool, tag)
82 YAJD::ConstantPool::CPInfo#initialize at lib/constant_pool/cpinfo.rb:11
79 @name_index = f.read_u2
@name_index = f.read_u2
82 File#read_u2 at lib/ext/file.rb:10
80 end
81
82 attr_reader :name_index
83
84 def validate(constant_pool)
def validate(constant_pool)
53 lib/constant_pool.rb:35 in 'YAJD::ConstantPool::Pool#validate'
85 check_ref_utf(constant_pool, name_index)
check_ref_utf(constant_pool, name_index)
53 YAJD::ConstantPool::CPInfo#check_ref_utf at lib/constant_pool/cpinfo.rb:43
86 #TODO check name is valid class name or interface name in internal form
87 end
88
89 def to_s
90 "#{self.class}: #{@name_index}"
91 end
92
93 def full_name
def full_name
491 lib/constant_pool/cpinfo.rb:99 in 'YAJD::ConstantPool::CClass#name'
472 lib/visitor/javap/class_file.rb:151 in 'YAJD::Visitor::Javap::ClassFileVisitor#klass'
376 lib/visitor/javap/code_info.rb:96 in 'YAJD::Visitor::Javap::CodeInfoVisitor#refactor_me'
184 lib/visitor/javap/code_info.rb:81 in 'YAJD::Visitor::Javap::CodeInfoVisitor#refactor_me'
87 lib/visitor/javap/code_info.rb:105 in 'YAJD::Visitor::Javap::CodeInfoVisitor#refactor_me'
36 lib/visitor/javap/code_info.rb:148 in 'YAJD::Visitor::Javap::CodeInfoVisitor#refactor_me'
31 lib/visitor/javap/code_info.rb:313 in 'YAJD::Visitor::Javap::CodeInfoVisitor#dump_exception_table'
22 lib/visitor/javap/code_info.rb:157 in 'YAJD::Visitor::Javap::CodeInfoVisitor#refactor_me'
8 test/tc_bytecodes.rb:39 in 'TestBytecodes#test_bytecodes'
5 lib/visitor/javap/class_file.rb:72 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_info'
4 lib/visitor/javap/class_file.rb:83 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_info'
1 lib/visitor/javap/class_file.rb:77 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_info'
94 @pool.at(@name_index).bytes
@pool.at(@name_index).bytes
1717 YAJD::ConstantPool::Pool#at at lib/constant_pool.rb:42
95 end
96
97 # Return the name of the class. It assumes this instance passed the validations.
98 def name
def name
226 lib/visitor/javap/method_info.rb:38 in 'YAJD::Visitor::Javap::MethodInfoVisitor#dump_exceptions'
226 lib/visitor/javap/method_info.rb:69 in 'YAJD::Visitor::Javap::MethodInfoVisitor#dump_attributes'
14 lib/visitor/javap/method_info.rb:19 in 'YAJD::Visitor::Javap::MethodInfoVisitor#header'
10 lib/visitor/javap/class_file.rb:31 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_signature'
10 lib/visitor/javap/class_file.rb:26 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_signature'
5 lib/visitor/javap/class_file.rb:41 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_signature'
99 Util::Java::FQF::to_java(full_name)
Util::Java::FQF::to_java(full_name)
491 YAJD::ConstantPool::CClass#full_name at lib/constant_pool/cpinfo.rb:93
491 #<Class:YAJD::Util::Java::FQF>#to_java at lib/utils.rb:67
100 end
101 # Returns only the clas name. It assumes this instance passed the validations.
102 def simple_name
103 name.gsub(/^.+\./, '')
104 end
105
106 # Returns only the package where this class resides. It assumes this instance passed the validations.
107 def package
108 name.gsub(/\.[^.]+$/, '')
109 end
110
111 # if this class is the root of the class hierarchy (i.e.: java.lang.Object). It assumes this instance passed the validations.
112 def is_root?
113 @pool.at(@name_index).bytes == 'java/lang/Object'
114 end
115
116 #TODO should I override == ?
117 def eql?(obj)
def eql?(obj)
345 lib/visitor/javap/code_info.rb:156 in 'YAJD::Visitor::Javap::CodeInfoVisitor#refactor_me'
118 obj.is_a?(CClass) && obj.name_index == name_index
119 end
120 end
121
122 class CNameType < CPInfo
123 include PoolHelper
include PoolHelper
1 #<Class:YAJD::PoolHelper>#included at lib/pool_helper.rb:5
124
125 pool_getter :name
pool_getter :name
1 #<Class:YAJD::ConstantPool::CNameType>#pool_getter at lib/pool_helper.rb:8
126 pool_getter :descriptor
pool_getter :descriptor
1 #<Class:YAJD::ConstantPool::CNameType>#pool_getter at lib/pool_helper.rb:8
127
128
129 def initialize(pool, tag, f)
def initialize(pool, tag, f)
286 lib/constant_pool/cpinfo.rb:66 in '#<Class:YAJD::ConstantPool::CPInfo>#create_instance'
130 super(pool, tag)
super(pool, tag)
286 YAJD::ConstantPool::CPInfo#initialize at lib/constant_pool/cpinfo.rb:11
131 @name_index = f.read_u2
@name_index = f.read_u2
286 File#read_u2 at lib/ext/file.rb:10
132 @descriptor_index = f.read_u2
@descriptor_index = f.read_u2
286 File#read_u2 at lib/ext/file.rb:10
133 end
134
135 attr_reader :name_index, :descriptor_index
136
137 def validate(constant_pool)
def validate(constant_pool)
264 lib/constant_pool.rb:35 in 'YAJD::ConstantPool::Pool#validate'
138 check_ref_utf(constant_pool, name_index)
check_ref_utf(constant_pool, name_index)
264 YAJD::ConstantPool::CPInfo#check_ref_utf at lib/constant_pool/cpinfo.rb:43
139 end
140 end
141
142 #TODO find a good name
143 class CommonAttrs < CPInfo
144 include PoolHelper
include PoolHelper
1 #<Class:YAJD::PoolHelper>#included at lib/pool_helper.rb:5
145
146 def initialize(pool, tag, f)
def initialize(pool, tag, f)
390 lib/constant_pool/cpinfo.rb:66 in '#<Class:YAJD::ConstantPool::CPInfo>#create_instance'
147 super(pool, tag)
super(pool, tag)
390 YAJD::ConstantPool::CPInfo#initialize at lib/constant_pool/cpinfo.rb:11
148 @class_index = f.read_u2
@class_index = f.read_u2
390 File#read_u2 at lib/ext/file.rb:10
149 @name_and_type_index = f.read_u2
@name_and_type_index = f.read_u2
390 File#read_u2 at lib/ext/file.rb:10
150 end
151
152 attr_reader :class_index, :name_and_type_index
153
154 def validate(constant_pool)
def validate(constant_pool)
200 lib/constant_pool/cpinfo.rb:167 in 'YAJD::ConstantPool::CMethodRef#validate'
155 lib/constant_pool/cpinfo.rb:185 in 'YAJD::ConstantPool::CIMethodRef#validate'
13 lib/constant_pool/cpinfo.rb:177 in 'YAJD::ConstantPool::CFieldRef#validate'
155 check_ref_class(constant_pool, class_index)
check_ref_class(constant_pool, class_index)
368 YAJD::ConstantPool::CPInfo#check_ref_class at lib/constant_pool/cpinfo.rb:46
156 end
157
158 pool_getter :klass, :class_index
pool_getter :klass, :class_index
1 #<Class:YAJD::ConstantPool::CommonAttrs>#pool_getter at lib/pool_helper.rb:8
159 pool_getter :name_and_type
pool_getter :name_and_type
1 #<Class:YAJD::ConstantPool::CommonAttrs>#pool_getter at lib/pool_helper.rb:8
160 end
161
162 class CBaseMethodRef < CommonAttrs
163 end
164
165 class CMethodRef < CBaseMethodRef
166 def validate(constant_pool)
def validate(constant_pool)
200 lib/constant_pool.rb:35 in 'YAJD::ConstantPool::Pool#validate'
167 super(constant_pool)
super(constant_pool)
200 YAJD::ConstantPool::CommonAttrs#validate at lib/constant_pool/cpinfo.rb:154
168 #TODO the class is not an interface
169 check_reference(constant_pool, name_and_type_index, CPInfo::NAME_AND_TYPE)
check_reference(constant_pool, name_and_type_index, CPInfo::NAME_AND_TYPE)
200 YAJD::ConstantPool::CPInfo#check_reference at lib/constant_pool/cpinfo.rb:49
170 #TODO check if name begins with '<' then the name must be '<init>' and return void
171 #TODO check it's a method descriptor
172 end
173 end
174
175 class CFieldRef < CommonAttrs
176 def validate(constant_pool)
def validate(constant_pool)
13 lib/constant_pool.rb:35 in 'YAJD::ConstantPool::Pool#validate'
177 super(constant_pool)
super(constant_pool)
13 YAJD::ConstantPool::CommonAttrs#validate at lib/constant_pool/cpinfo.rb:154
178 check_reference(constant_pool, name_and_type_index, CPInfo::NAME_AND_TYPE)
check_reference(constant_pool, name_and_type_index, CPInfo::NAME_AND_TYPE)
13 YAJD::ConstantPool::CPInfo#check_reference at lib/constant_pool/cpinfo.rb:49
179 #TODO check it's a field descriptor
180 end
181 end
182
183 class CIMethodRef < CBaseMethodRef
184 def validate(constant_pool)
def validate(constant_pool)
155 lib/constant_pool.rb:35 in 'YAJD::ConstantPool::Pool#validate'
185 super(constant_pool)
super(constant_pool)
155 YAJD::ConstantPool::CommonAttrs#validate at lib/constant_pool/cpinfo.rb:154
186 #TODO the class is an interface
187 check_reference(constant_pool, name_and_type_index, CPInfo::NAME_AND_TYPE)
check_reference(constant_pool, name_and_type_index, CPInfo::NAME_AND_TYPE)
155 YAJD::ConstantPool::CPInfo#check_reference at lib/constant_pool/cpinfo.rb:49
188 #TODO check it's a field descriptor
189 end
190 end
191
192 end
193
194 end
Generated using the rcov code coverage analysis tool for Ruby version 0.8.0.