class JavaClass::ClassFile::ClassVersion

Version of a class file.

Author

Peter Kofler

Attributes

major[R]
minor[R]

Public Class Methods

new(data, start=4) click to toggle source

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

# File lib/javaclass/classfile/class_version.rb, line 14
def initialize(data, start=4)
  @minor = data.u2(start)
  @major = data.u2(start+2)
end

Public Instance Methods

dump() click to toggle source

Return a debug output of this version.

# File lib/javaclass/classfile/class_version.rb, line 39
def dump
  ["  minor version: #{@minor}", "  major version: #{@major}"]
end
jdk_version() click to toggle source

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

# 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_f() click to toggle source

Return the version as major.minor float.

# File lib/javaclass/classfile/class_version.rb, line 25
def to_f
  @major + @minor/denom
end
to_s() click to toggle source

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

# File lib/javaclass/classfile/class_version.rb, line 20
def to_s
  "#{@major}.#{@minor}"
end

Private Instance Methods

denom() click to toggle source
# File lib/javaclass/classfile/class_version.rb, line 29
def denom
  if @minor <= 0
    1.0
  else
    1.0 * 10**(Math.log10(@minor).floor + 1)
  end
end