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 |
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. |
Create a new JVM name string with optional qualified class which may be available.
# 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?
# File lib/javaclass/java_name.rb, line 208 def self.valid?(string) string =~ ARRAY_REGEX || string =~ VALID_REGEX end
Is this a bytecode array, e.g. represented by [B.
# File lib/javaclass/java_name.rb, line 241 def array? @is_array end
# 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
# 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