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.



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

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



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

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



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

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

#error_argumentObject



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

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



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

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

#method_argumentsObject



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

def method_arguments
  argument_builder_collection.method_argument_names
end

#method_definitionObject



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

def method_definition
  template.method_definition
end

#preparationObject



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

def preparation
  []
end

#receiver_builderObject



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

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

#return_value_builderObject



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

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

#return_value_infoObject



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

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

#templateObject



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

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

#variable_generatorObject



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

def variable_generator
  @variable_generator ||= VariableNameGenerator.new
end