Class JavaClass::JavaVMName
In: lib/javaclass/java_name.rb
Parent: String

A class name from the JVM. That is a/b/C. These names are read from the constant pool. Atoms and arrays are expressed as JVM names as well.

Author:Peter Kofler

Methods

Included Modules

JavaQualifiedNameDelegation

Constants

SEPARATOR = '/'
SEPARATOR_REGEX = Regexp::escape(SEPARATOR)
ARRAY_REGEX = /^\[+L(.+);$|^\[+([A-Z])$/
VALID_REGEX = /^ (?: #{JavaLanguage::IDENTIFIER_REGEX}#{SEPARATOR_REGEX} )* #{JavaLanguage::IDENTIFIER_REGEX} $/x
ATOMS = { 'B' => 'java/lang/Byte', 'S' => 'java/lang/Short', 'I' => 'java/lang/Integer', 'J' => 'java/lang/Long', 'F' => 'java/lang/Float', 'D' => 'java/lang/Double', 'Z' => 'java/lang/Booleam', 'C' => 'java/lang/Character' }   Mapping of atoms to wrappers.

Public Class methods

Create a new JVM name string with optional qualified class which may be available.

[Source]

# File lib/javaclass/java_name.rb, line 213
    def initialize(string, qualified=nil)
      super string

      if string =~ ARRAY_REGEX
        @is_array = string[/^\[+/].length
        string = string.sub(ARRAY_REGEX, '\1\2')

        if string =~ /^[BSIJFDZC]$/
          @is_atom = string
          string = ATOMS[string]
        else
          @is_atom = false
        end
      
      else
        @is_array = false
      end

      if string =~ VALID_REGEX
        @jvm_name = string
      else
        raise ArgumentError, "#{string} is no valid JVM name"
      end
      @qualified_name = qualified
      @class_name = nil      
    end

Is string a valid JVM name?

[Source]

# File lib/javaclass/java_name.rb, line 208
    def self.valid?(string)
      string =~ ARRAY_REGEX || string =~ VALID_REGEX
    end

Public Instance methods

Is this a bytecode array, e.g. represented by [B.

[Source]

# File lib/javaclass/java_name.rb, line 241
    def array?
      @is_array
    end

[Source]

# File lib/javaclass/java_name.rb, line 263
    def to_class_file
      return @class_name if @class_name
      new_val = JavaClassFileName.new(@jvm_name + JavaLanguage::CLASS, @qualified_name)
      if frozen?
        new_val
      else 
        @class_name = new_val
      end 
    end

[Source]

# File lib/javaclass/java_name.rb, line 245
    def to_classname
      return @qualified_name if @qualified_name
      new_val = JavaQualifiedName.new(@jvm_name.gsub(SEPARATOR, JavaLanguage::SEPARATOR), self, nil)
      if frozen?
        new_val
      else 
        @qualified_name = new_val
      end 
    end

[Source]

# File lib/javaclass/java_name.rb, line 259
    def to_java_file
      @jvm_name + JavaLanguage::SOURCE
    end

[Source]

# File lib/javaclass/java_name.rb, line 255
    def to_jvmname
      self
    end

[Validate]