C0 code coverage information

Generated on Wed Aug 01 14:04:25 -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.
Name Total lines Lines of code Total coverage Code coverage
lib/class_file.rb 169 124
89.3% 
85.5% 
  1 require 'validator'
  2 require 'access_flags'
  3 require 'logger'
  4 require 'constant_pool'
  5 require 'common'
  6 require 'java'
  7 require 'visitor'
  8 
  9 module YAJD
 10 
 11 # TODO refactor the code. it's a mess.
 12 
 13 # TODO make sure all the classes' attributes representing the structs of the java class have the same names as the spec
 14 
 15 # TODO at this point all I do is read the class file, I should add all the checks the spec says.
 16 
 17 #TODO do the checks about combination of access flags
 18 
 19 class ClassFile
 20     MAGIC = 0xCAFEBABE
 21 
 22     attr_reader :magic, :minor_version, :major_version
 23     attr_reader :constant_pool, :this_class, :access_flags, :super_class,
 24         :interfaces, :fields, :attributes
 25     alias :pool :constant_pool
 26 
 27     # method 'methods' already exists
 28     def java_methods
 29         @methods
 30     end
 31 
 32     def initialize(f)
    def initialize(f)
      8   test/tc_bytecodes.rb:35 in 'TestBytecodes#test_bytecodes'
      2   test/tc_jdk.rb:79 in 'TestJdk#check_jdk'

 33         if f.is_a?(String)
 34             File.open(f) { |file| read(file) }
            File.open(f) { |file| read(file) }
      8   YAJD::ClassFile#read at lib/class_file.rb:126

 35         else
 36             read(f)
            read(f)
      2   YAJD::ClassFile#read at lib/class_file.rb:126

 37         end
 38     end
 39 
 40     def validate
    def validate
      2   test/tc_jdk.rb:81 in 'TestJdk#check_jdk'

 41         #TODO validate version number?
 42         pool.validate
        pool.validate
      2   YAJD::ConstantPool::Pool#validate at lib/constant_pool.rb:34

 43         validate_access_flags
        validate_access_flags
      2   YAJD::Validator#validate_access_flags at lib/validator.rb:5

 44         validate_classes
        validate_classes
      2   YAJD::Validator#validate_classes at lib/validator.rb:8

 45         validate_interfaces
        validate_interfaces
      2   YAJD::Validator#validate_interfaces at lib/validator.rb:11

 46         validate_fields
        validate_fields
      2   YAJD::Validator#validate_fields at lib/validator.rb:14

 47         validate_methods
        validate_methods
      2   YAJD::Validator#validate_methods at lib/validator.rb:17

 48         validate_attributes
        validate_attributes
      2   YAJD::Validator#validate_attributes at lib/validator.rb:20

 49     end
 50 
 51     def version
    def version
      2   test/tc_jdk.rb:80 in 'TestJdk#check_jdk'

 52         major_version + minor_version / 10
 53     end
 54 
 55     def attributes_count
 56         @attributes.size
 57     end
 58 
 59     def methods_count
 60         @methods.size
 61     end
 62 
 63     def interfaces_count
 64         @interfaces.size
 65     end
 66 
 67     def fields_count
 68         @fields.size
 69     end
 70 
 71     def to_s
 72         <<END
 73 magic: 0x#{@magic.to_s(16).upcase}
 74 version: #{@major_version}.#{@minor_version} (major.minor)
 75 this: #{@this_class}
 76 super: #{@super_class}
 77 interfaces: #{@interfaces}
 78 END
 79     end
 80 
 81     def this
    def this
      8   test/tc_bytecodes.rb:39 in 'TestBytecodes#test_bytecodes'

 82         @constant_pool.at(@this_class)
        @constant_pool.at(@this_class)
      8   YAJD::ConstantPool::Pool#at at lib/constant_pool.rb:42

 83     end
 84 
 85     def to_javap
    def to_javap
      8   test/tc_bytecodes.rb:37 in 'TestBytecodes#test_bytecodes'
      2   test/tc_jdk.rb:57 in 'TestJdk#assert_javap'

 86         visitor = Visitor::Javap.create
        visitor = Visitor::Javap.create
     10   #<Class:YAJD::Visitor::Javap>#create at lib/visitor/javap.rb:12

 87         accept(visitor)
        accept(visitor)
     10   YAJD::ClassFile#accept at lib/class_file.rb:91

 88         visitor.dump
        visitor.dump
     10   YAJD::Visitor::Javap::JavapVisitor#dump at lib/visitor/javap.rb:40

 89     end
 90 
 91     def accept(visitor)
    def accept(visitor)
     10   lib/class_file.rb:87 in 'YAJD::ClassFile#to_javap'

 92         visitor.visit(self)
        visitor.visit(self)
     10   YAJD::Visitor::Javap::JavapVisitor#visit at lib/visitor/javap.rb:23

 93         @fields.accept(visitor)
        @fields.accept(visitor)
     10   Array#accept at lib/ext/array.rb:2

 94         @methods.accept(visitor)
        @methods.accept(visitor)
     10   Array#accept at lib/ext/array.rb:2

 95     end
 96 
 97     def inner_classes
    def inner_classes
     10   lib/visitor/javap/class_file.rb:63 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_info'

 98         #TODO this is repeated several times
 99         @attributes.find { |attr| attr.is_a?(Attributes::InnerClassesInfo) }
100     end
101 
102     def deprecated?
    def deprecated?
     10   lib/visitor/javap/class_file.rb:56 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_info'

103         #TODO this is repeated several times
104         attr = @attributes.find { |attr| attr.is_a?(Attributes::DeprecatedInfo) }
105         not attr.nil?
106     end
107 
108     # Returns the source filename from which this class was compiled.
109     def source_file
    def source_file
     10   lib/visitor/javap/class_file.rb:51 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_info'
     10   lib/visitor/javap/class_file.rb:97 in 'YAJD::Visitor::Javap::ClassFileVisitor#source_file'

110         #TODO this is repeated several times
111         attr = @attributes.find { |attr| attr.is_a?(Attributes::SourceFileInfo) }
112         unless attr.nil?
113             attr.source_file
            attr.source_file
     18   YAJD::Attributes::SourceFileInfo#source_file at lib/attributes/source_file.rb:17

114         end
115     end
116 
117     # if this class is the root of the class hierarchy (i.e.: java.lang.Object)
118     def is_root?
    def is_root?
     10   lib/visitor/javap/class_file.rb:28 in 'YAJD::Visitor::Javap::ClassFileVisitor#class_signature'

119         @super_class == 0
120     end
121 
122 protected
123 
124     include Validator
125 
126     def read(f)
    def read(f)
      8   lib/class_file.rb:34 in 'YAJD::ClassFile#initialize'
      2   lib/class_file.rb:36 in 'YAJD::ClassFile#initialize'

127         read_magic(f)
        read_magic(f)
     10   YAJD::ClassFile#read_magic at lib/class_file.rb:151

128         read_version(f)
        read_version(f)
     10   YAJD::ClassFile#read_version at lib/class_file.rb:157

129         read_constant_pool(f)
        read_constant_pool(f)
     10   YAJD::ClassFile#read_constant_pool at lib/class_file.rb:163

130         YAJD::logger.info { 'reading access flags' }
        YAJD::logger.info { 'reading access flags' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

131         @access_flags = f.read_u2
        @access_flags = f.read_u2
     10   File#read_u2 at lib/ext/file.rb:10

132         YAJD::logger.info { 'reading this' }
        YAJD::logger.info { 'reading this' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

133         @this_class = f.read_u2
        @this_class = f.read_u2
     10   File#read_u2 at lib/ext/file.rb:10

134         YAJD::logger.info { 'reading super' }
        YAJD::logger.info { 'reading super' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

135         @super_class = f.read_u2
        @super_class = f.read_u2
     10   File#read_u2 at lib/ext/file.rb:10

136         YAJD::logger.info { 'reading interfaces' }
        YAJD::logger.info { 'reading interfaces' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

137         @interfaces = f.read_list { |f| f.read_u2 }
        @interfaces = f.read_list { |f| f.read_u2 }
     10   File#read_list at lib/ext/file.rb:22
      5   File#read_u2 at lib/ext/file.rb:10

138         YAJD::logger.info { 'reading fields' }
        YAJD::logger.info { 'reading fields' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

139         @fields = f.read_list { |f| FieldInfo.new(self, @this_class, pool, f) }
        @fields = f.read_list { |f| FieldInfo.new(self, @this_class, pool, f) }
    302   YAJD::CommonInfo#initialize at lib/common.rb:19
     10   File#read_list at lib/ext/file.rb:22

140         YAJD::logger.info { 'reading methods' }
        YAJD::logger.info { 'reading methods' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

141         @methods = f.read_list { |f| MethodInfo.new(self, @this_class, pool, f) }
        @methods = f.read_list { |f| MethodInfo.new(self, @this_class, pool, f) }
    248   YAJD::CommonInfo#initialize at lib/common.rb:19
     10   File#read_list at lib/ext/file.rb:22

142         YAJD::logger.info { 'reading attributes' }
        YAJD::logger.info { 'reading attributes' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

143         @attributes = f.read_list { |f| Attributes.factory(pool, self, f) }
        @attributes = f.read_list { |f| Attributes.factory(pool, self, f) }
     12   #<Class:YAJD::Attributes>#factory at lib/attributes/attribute.rb:7
     10   File#read_list at lib/ext/file.rb:22

144 
145 #TODO check why I wrote this :O
146 #       raise 'More data than expected!' unless f.read.nil?
147 
148         self
149     end
150 
151     def read_magic(f)
    def read_magic(f)
     10   lib/class_file.rb:127 in 'YAJD::ClassFile#read'

152         YAJD::logger.info { 'reading magic' }
        YAJD::logger.info { 'reading magic' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

153         @magic = f.read_u4
        @magic = f.read_u4
     10   File#read_u4 at lib/ext/file.rb:15

154         raise "unknown magic! (#{magic.to_s(16)})" unless magic == MAGIC
155     end
156 
157     def read_version(f)
    def read_version(f)
     10   lib/class_file.rb:128 in 'YAJD::ClassFile#read'

158         YAJD::logger.info { 'reading version' }
        YAJD::logger.info { 'reading version' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

159         @minor_version = f.read_u2
        @minor_version = f.read_u2
     10   File#read_u2 at lib/ext/file.rb:10

160         @major_version = f.read_u2
        @major_version = f.read_u2
     10   File#read_u2 at lib/ext/file.rb:10

161     end
162 
163     def read_constant_pool(f)
    def read_constant_pool(f)
     10   lib/class_file.rb:129 in 'YAJD::ClassFile#read'

164         YAJD::logger.info { 'reading constant pool' }
        YAJD::logger.info { 'reading constant pool' }
     10   Logger#info at /usr/lib/ruby/1.8/logger.rb:373
     10   #<Class:YAJD>#logger at lib/yajd.rb:20

165         @constant_pool = ConstantPool::Pool.new(f)
        @constant_pool = ConstantPool::Pool.new(f)
     10   YAJD::ConstantPool::Pool#initialize at lib/constant_pool.rb:13

166     end
167 end
168 
169 end

Generated using the rcov code coverage analysis tool for Ruby version 0.8.0.

Valid XHTML 1.0! Valid CSS!