Class: GirFFI::Builders::BaseMethodBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/gir_ffi/builders/base_method_builder.rb

Overview

Base class for method definition builders.

Instance Method Summary collapse

Constructor Details

#initialize(info, return_value_builder_class, receiver_info: nil, argument_builder_class: ArgumentBuilder) ⇒ BaseMethodBuilder

Returns a new instance of BaseMethodBuilder.



15
16
17
18
19
20
21
22
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 15

def initialize(info, return_value_builder_class,
               receiver_info: nil,
               argument_builder_class: ArgumentBuilder)
  @info = info
  @return_value_builder_class = return_value_builder_class
  @argument_builder_class = argument_builder_class
  @receiver_info = receiver_info
end

Instance Method Details

#argument_builder_collectionObject



58
59
60
61
62
63
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 58

def argument_builder_collection
  @argument_builder_collection ||=
    ArgumentBuilderCollection.new(return_value_builder, argument_builders,
                                  error_argument_builder: error_argument,
                                  receiver_builder: receiver_builder)
end

#argument_buildersObject

Methods used for setting up the builders



38
39
40
41
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 38

def argument_builders
  @argument_builders ||=
    @info.args.map { |arg| make_argument_builder arg }
end

#error_argumentObject



65
66
67
68
69
70
71
72
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 65

def error_argument
  @error_argument ||=
    if @info.can_throw_gerror?
      make_argument_builder ErrorArgumentInfo.new
    else
      NullArgumentBuilder.new
    end
end

#invocationObject

Methods used by MethodTemplate



76
77
78
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 76

def invocation
  "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(', ')}".strip
end

#method_argumentsObject



80
81
82
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 80

def method_arguments
  argument_builder_collection.method_argument_names
end

#method_definitionObject



28
29
30
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 28

def method_definition
  template.method_definition
end

#preparationObject



84
85
86
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 84

def preparation
  []
end

#receiver_builderObject



54
55
56
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 54

def receiver_builder
  @receiver_builder ||= @receiver_info ? make_argument_builder(@receiver_info) : nil
end

#return_value_builderObject



49
50
51
52
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 49

def return_value_builder
  @return_value_builder = @return_value_builder_class.new(variable_generator,
                                                          return_value_info)
end

#return_value_infoObject



43
44
45
46
47
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 43

def return_value_info
  @return_value_info ||= ReturnValueInfo.new(@info.return_type,
                                             @info.caller_owns,
                                             @info.skip_return?)
end

#templateObject



32
33
34
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 32

def template
  @template ||= MethodTemplate.new(self, argument_builder_collection)
end

#variable_generatorObject



24
25
26
# File 'lib/gir_ffi/builders/base_method_builder.rb', line 24

def variable_generator
  @variable_generator ||= VariableNameGenerator.new
end