Class: Archruby::Ruby::TypeInference::TypeInferenceChecker
- Inherits:
-
Object
- Object
- Archruby::Ruby::TypeInference::TypeInferenceChecker
- Defined in:
- lib/archruby/ruby/type_inference/type_inference_checker.rb
Instance Attribute Summary collapse
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#method_definitions ⇒ Object
readonly
Returns the value of attribute method_definitions.
Instance Method Summary collapse
- #add_dependency_based_on_calls ⇒ Object
- #add_dependency_based_on_internal_calls ⇒ Object
- #add_new_dependencies(receiver_class, dependencies, method_name) ⇒ Object
- #add_new_params_dependency(method_definition, dependencies) ⇒ Object
- #add_to_dependencies(receiver_class, dependencies) ⇒ Object
- #add_to_method_definitions(receiver_class, dependencies, method_name) ⇒ Object
- #extract_formal_parameter(params) ⇒ Object
- #extract_param_classes(method_args, params) ⇒ Object
-
#initialize(dependencies, method_definitions) ⇒ TypeInferenceChecker
constructor
A new instance of TypeInferenceChecker.
- #total_deps ⇒ Object
Constructor Details
#initialize(dependencies, method_definitions) ⇒ TypeInferenceChecker
Returns a new instance of TypeInferenceChecker.
8 9 10 11 |
# File 'lib/archruby/ruby/type_inference/type_inference_checker.rb', line 8 def initialize(dependencies, method_definitions) @dependencies = dependencies @method_definitions = method_definitions end |
Instance Attribute Details
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
6 7 8 |
# File 'lib/archruby/ruby/type_inference/type_inference_checker.rb', line 6 def dependencies @dependencies end |
#method_definitions ⇒ Object (readonly)
Returns the value of attribute method_definitions.
6 7 8 |
# File 'lib/archruby/ruby/type_inference/type_inference_checker.rb', line 6 def method_definitions @method_definitions end |
Instance Method Details
#add_dependency_based_on_calls ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# 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 ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# 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) ⇒ Object
75 76 77 78 |
# 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) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# 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) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 |
# 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) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 |
# 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) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# 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) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 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 ⇒ Object
13 14 15 16 17 18 19 |
# 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 |