Class: JavaClass::ClassFile::ClassVersion

Inherits:
Object
  • Object
show all
Defined in:
lib/javaclass/classfile/class_version.rb

Overview

Version of a class file.

Author

Peter Kofler

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data, start = 4) ⇒ ClassVersion

Extract the class version from the bytes data starting at position start (which is usually 4).



14
15
16
17
# File 'lib/javaclass/classfile/class_version.rb', line 14

def initialize(data, start=4)
  @minor = data.u2(start)
  @major = data.u2(start+2)
end

Instance Attribute Details

#majorObject (readonly)

Returns the value of attribute major.



11
12
13
# File 'lib/javaclass/classfile/class_version.rb', line 11

def major
  @major
end

#minorObject (readonly)

ZenTest FULL to find method to_s



10
11
12
# File 'lib/javaclass/classfile/class_version.rb', line 10

def minor
  @minor
end

Instance Method Details

#dumpObject

Return a debug output of this version.



39
40
41
# File 'lib/javaclass/classfile/class_version.rb', line 39

def dump
  ["  minor version: #{@minor}", "  major version: #{@major}"]
end

#jdk_versionObject

Return the JDK version corresponding to this version like “1.6” or “unknown” if none matched.



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/javaclass/classfile/class_version.rb', line 44

def jdk_version
  v = to_f
  if v >= 45.0 && v <= 45.3 # 1.0.2 supports class file format versions 45.0 through 45.3 inclusive.
    '1.0'
  elsif v > 45.3 && v <= 45.65535 # 1.1.X can support class file formats of versions in the range 45.0 through 45.65535 inclusive
    '1.1'
  elsif @major >= 46 && @minor == 0
    "1.#{@major-44}"
  else
    'unknown'
  end
end

#to_fObject

Return the version as major.minor float.



25
26
27
# File 'lib/javaclass/classfile/class_version.rb', line 25

def to_f
  @major + @minor/denom
end

#to_sObject

Return the class file version as major.minor string like 48.0 (Java 1.4) or 50.0 (Java 6).



20
21
22
# File 'lib/javaclass/classfile/class_version.rb', line 20

def to_s
  "#{@major}.#{@minor}"
end