Class: BiteScript::ASM::GenericTypeBuilder
- Inherits:
-
SignatureVisitor
- Object
- SignatureVisitor
- BiteScript::ASM::GenericTypeBuilder
- Includes:
- SignatureVisitor
- Defined in:
- lib/bitescript/mirror.rb,
lib/bitescript/asm3/mirror.rb
Instance Attribute Summary collapse
-
#result ⇒ Object
readonly
Returns the value of attribute result.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(&block) ⇒ GenericTypeBuilder
constructor
A new instance of GenericTypeBuilder.
- #return_type(type) ⇒ Object
- #visitArrayType ⇒ Object
- #visitBaseType(desc) ⇒ Object
- #visitClassType(desc) ⇒ Object
- #visitEnd ⇒ Object
- #visitInnerClassType(name) ⇒ Object
- #visitSuperclass ⇒ Object
- #visitTypeArgument(wildcard = nil) ⇒ Object
- #visitTypeVariable(name) ⇒ Object
Constructor Details
#initialize(&block) ⇒ GenericTypeBuilder
Returns a new instance of GenericTypeBuilder.
660 661 662 663 |
# File 'lib/bitescript/mirror.rb', line 660 def initialize(&block) super(BiteScript::ASM::Opcodes::ASM4) @block = block end |
Instance Attribute Details
#result ⇒ Object (readonly)
Returns the value of attribute result.
649 650 651 |
# File 'lib/bitescript/mirror.rb', line 649 def result @result end |
Class Method Details
.read(signature) ⇒ Object
651 652 653 654 655 656 657 658 |
# File 'lib/bitescript/mirror.rb', line 651 def self.read(signature) if signature builder = GenericTypeBuilder.new reader = BiteScript::ASM::SignatureReader.new(signature) reader.accept(builder) builder.result end end |
Instance Method Details
#return_type(type) ⇒ Object
665 666 667 668 |
# File 'lib/bitescript/mirror.rb', line 665 def return_type(type) @result = type @block.call(type) if @block end |
#visitArrayType ⇒ Object
674 675 676 677 678 |
# File 'lib/bitescript/mirror.rb', line 674 def visitArrayType type = GenericArray.new return_type(type) GenericTypeBuilder.new {|component_type| type.component_type = component_type} end |
#visitBaseType(desc) ⇒ Object
670 671 672 |
# File 'lib/bitescript/mirror.rb', line 670 def visitBaseType(desc) return_type(Type.getType(desc.chr)) end |
#visitClassType(desc) ⇒ Object
684 685 686 |
# File 'lib/bitescript/mirror.rb', line 684 def visitClassType(desc) return_type(ParameterizedType.new(Type.getObjectType(desc))) end |
#visitEnd ⇒ Object
718 719 720 721 722 |
# File 'lib/bitescript/mirror.rb', line 718 def visitEnd if @result.type_arguments.empty? && @result.outer_type.nil? @result = @result.raw_type end end |
#visitInnerClassType(name) ⇒ Object
713 714 715 716 |
# File 'lib/bitescript/mirror.rb', line 713 def visitInnerClassType(name) desc = @result.descriptor.sub(/;$/, "$#{name};") return_type(ParameterizedType.new(Type.getType(desc), @result)) end |
#visitSuperclass ⇒ Object
709 710 711 |
# File 'lib/bitescript/mirror.rb', line 709 def visitSuperclass self end |
#visitTypeArgument(wildcard = nil) ⇒ Object
688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 |
# File 'lib/bitescript/mirror.rb', line 688 def visitTypeArgument(wildcard=nil) if wildcard.nil? @result.type_arguments << Wildcard.new(Type.getObjectType('java/lang/Object')) return end GenericTypeBuilder.new do |type| argument = case wildcard when INSTANCEOF type when EXTENDS Wildcard.new(type) when SUPER Wildcard.new(nil, type) else raise "Unknown wildcard #{wildcard.chr}" end @result.type_arguments << argument end end |
#visitTypeVariable(name) ⇒ Object
680 681 682 |
# File 'lib/bitescript/mirror.rb', line 680 def visitTypeVariable(name) return_type(TypeVariable.new(name)) end |