Class: JRuby::Lint::Checkers::ObjectSpace

Inherits:
Object
  • Object
show all
Includes:
JRuby::Lint::Checker
Defined in:
lib/jruby/lint/checkers/object_space.rb

Constant Summary collapse

METHODS =
[:each_object, :_id2ref]
OK_ARGS =
[:Class, :Module]

Instance Attribute Summary

Attributes included from JRuby::Lint::Checker

#collector

Instance Method Summary collapse

Methods included from JRuby::Lint::Checker

#grand_parent, included, loaded_checkers, #parent, #src_line

Instance Method Details

#add_finding(collector, node) ⇒ Object



21
22
23
24
# File 'lib/jruby/lint/checkers/object_space.rb', line 21

def add_finding(collector, node)
  collector.add_finding("Use of ObjectSpace is expensive and disabled by default. Use -X+O to enable.",
                                    [:objectspace, :warning], node.line+1)
end

#visitCallNode(node) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/jruby/lint/checkers/object_space.rb', line 8

def visitCallNode(node)
  if METHODS.include?(node.name)
    begin
      return unless node.receiver_node.node_type.to_s == "CONSTNODE" &&
                node.receiver_node.name == :ObjectSpace
      return if node.args_node && node.args_node.size == 1 &&
                OK_ARGS.include?(node.args_node.first.name)
      add_finding(collector, node)
    rescue
    end
  end
end