class Archruby::Ruby::TypeInference::TypeInferenceChecker

Attributes

dependencies[R]
method_definitions[R]

Public Class Methods

new(dependencies, method_definitions) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 8
def initialize(dependencies, method_definitions)
  @dependencies = dependencies
  @method_definitions = method_definitions
end

Public Instance Methods

add_dependency_based_on_calls() click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 21
def add_dependency_based_on_calls
  @method_definitions.each do |class_name, method_definitions|
    method_definitions.each do |method_definition|
      method_definition.method_calls.each do |method_call|
        receiver_class = method_call.class_name
        method_name = method_call.method_name
        dependencies = extract_param_classes(method_definition.args, method_call.params)
        add_new_dependencies(receiver_class, dependencies, method_name)
      end
    end
  end
end
add_dependency_based_on_internal_calls() click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 34
def add_dependency_based_on_internal_calls
  3.times do
    @method_definitions.each do |class_name, method_definitions|
      method_definitions.each do |method_definition|
        method_definition.method_calls.each do |method_call|
          receiver_class = method_call.class_name
          method_name = method_call.method_name
          formal_params = extract_formal_parameter(method_call.params)
          dependencies = extract_param_classes(method_definition.args, formal_params)
          add_new_dependencies(receiver_class, dependencies, method_name)
        end
      end
    end
  end
end
add_new_dependencies(receiver_class, dependencies, method_name) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 75
def add_new_dependencies(receiver_class, dependencies, method_name)
  add_to_dependencies(receiver_class, dependencies)
  add_to_method_definitions(receiver_class, dependencies, method_name)
end
add_new_params_dependency(method_definition, dependencies) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 105
def add_new_params_dependency(method_definition, dependencies)
  args = method_definition.args.keys
  dependencies.each_with_index do |deps, i|
    # aqui mantemos a ordem dos parametros formais
    formal_parameter_name = method_definition.args[args[i]]
    if formal_parameter_name
      deps.each do |dep|
        begin
          formal_parameter_name.add(dep)
        rescue
          binding.pry
        end
      end
    end
  end
end
add_to_dependencies(receiver_class, dependencies) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 80
def add_to_dependencies(receiver_class, dependencies)
  dep_class = @dependencies[receiver_class]
  if dep_class.nil?
    @dependencies[receiver_class] = Set.new
    dep_class = @dependencies[receiver_class]
  end
  # utilizamos o flatten pois aqui não importa a posição
  # do parametro formal
  dependencies.flatten.each do |dependency|
    dep_class.add(dependency)
  end
end
add_to_method_definitions(receiver_class, dependencies, method_name) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 93
def add_to_method_definitions(receiver_class, dependencies, method_name)
  method_definitions = @method_definitions[receiver_class]
  if method_definitions
    method_definitions.each do |method_definition|
      if method_definition.method_name == method_name
        add_new_params_dependency(method_definition, dependencies)
        break
      end
    end
  end
end
extract_formal_parameter(params) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 65
def extract_formal_parameter(params)
  formal_params = []
  params.each do |param|
    if param.class == Symbol
      formal_params << param
    end
  end
  formal_params
end
extract_param_classes(method_args, params) click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 50
def extract_param_classes(method_args, params)
  dependencies = []
  params.each do |param|
    if param.class == Symbol
      type = method_args[param]
      type = type.to_a
      dependencies << type
    elsif param.class == String
      type = [param]
      dependencies << type
    end
  end
  dependencies
end
total_deps() click to toggle source
# File lib/archruby/ruby/type_inference/type_inference_checker.rb, line 13
def total_deps
  total_dep = 0
  @dependencies.each do |class_name, deps|
    total_dep += deps.size
  end
  total_dep
end