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
617 618 619 620 |
# File 'lib/bitescript/mirror.rb', line 617 def initialize(&block) super(BiteScript::ASM::Opcodes::ASM4) @block = block end |
Instance Attribute Details
#result ⇒ Object (readonly)
Returns the value of attribute result.
606 607 608 |
# File 'lib/bitescript/mirror.rb', line 606 def result @result end |
Class Method Details
.read(signature) ⇒ Object
608 609 610 611 612 613 614 615 |
# File 'lib/bitescript/mirror.rb', line 608 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
622 623 624 625 |
# File 'lib/bitescript/mirror.rb', line 622 def return_type(type) @result = type @block.call(type) if @block end |
#visitArrayType ⇒ Object
631 632 633 634 635 |
# File 'lib/bitescript/mirror.rb', line 631 def visitArrayType type = GenericArray.new return_type(type) GenericTypeBuilder.new {|component_type| type.component_type = component_type} end |
#visitBaseType(desc) ⇒ Object
627 628 629 |
# File 'lib/bitescript/mirror.rb', line 627 def visitBaseType(desc) return_type(Type.getType(desc.chr)) end |
#visitClassType(desc) ⇒ Object
641 642 643 |
# File 'lib/bitescript/mirror.rb', line 641 def visitClassType(desc) return_type(ParameterizedType.new(Type.getObjectType(desc))) end |
#visitEnd ⇒ Object
675 676 677 678 679 |
# File 'lib/bitescript/mirror.rb', line 675 def visitEnd if @result.type_arguments.empty? && @result.outer_type.nil? @result = @result.raw_type end end |
#visitInnerClassType(name) ⇒ Object
670 671 672 673 |
# File 'lib/bitescript/mirror.rb', line 670 def visitInnerClassType(name) desc = @result.descriptor.sub(/;$/, "$#{name};") return_type(ParameterizedType.new(Type.getType(desc), @result)) end |
#visitSuperclass ⇒ Object
666 667 668 |
# File 'lib/bitescript/mirror.rb', line 666 def visitSuperclass self end |
#visitTypeArgument(wildcard = nil) ⇒ Object
645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 |
# File 'lib/bitescript/mirror.rb', line 645 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
637 638 639 |
# File 'lib/bitescript/mirror.rb', line 637 def visitTypeVariable(name) return_type(TypeVariable.new(name)) end |