class JRuby::Lint::Checkers::NonAtomic
Constants
- CVAR
- IVAR
- OPERATORS
Public Instance Methods
add_finding(collector, node, name)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 64 def add_finding(collector, node, name) collector.add_finding("Non-local operator assignment (#{name}) is not guaranteed to be atomic.", [:nonatomic, :warning], node.line+1) end
check_nonatomic(orig_node, risk_node, name=nil)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 52 def check_nonatomic(orig_node, risk_node, name=nil) case risk_node when org::jruby::ast::LocalVarNode, org::jruby::ast::DVarNode # ok...mostly-safe cases false else add_finding(collector, orig_node, name || risk_node.name) true end end
operator_op_assignment?(node, type)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 29 def operator_op_assignment?(node, type) rhs = node.value_node rhs.kind_of?(org::jruby::ast::CallNode) && OPERATORS.include?(rhs.name) && rhs.receiver_node.kind_of?(type) end
visitClassVarAsgnNode(node)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 44 def visitClassVarAsgnNode(node) if !@last && operator_op_assignment?(node, CVAR) || @last && parent != @last check_nonatomic(node, node) end @last = nil end
visitInstAsgnNode(node)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 36 def visitInstAsgnNode(node) if !@last && operator_op_assignment?(node, IVAR) || @last && parent != @last check_nonatomic(node, node) end @last = nil end
visitOpAsgnAndNode(node)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 15 def visitOpAsgnAndNode(node) @last = node check_nonatomic(node, node.first_node) end
visitOpAsgnNode(node)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 25 def visitOpAsgnNode(node) check_nonatomic(node, node.receiver_node, node.variable_name) end
visitOpAsgnOrNode(node)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 10 def visitOpAsgnOrNode(node) @last = node check_nonatomic(node, node.first_node) end
visitOpElementAsgnNode(node)
click to toggle source
# File lib/jruby/lint/checkers/nonatomic.rb, line 20 def visitOpElementAsgnNode(node) name = src_line(node.line).split(node.operator_name + '=', 2)[0].strip add_finding(collector, node, name) end