44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/rkid/analyzer.rb', line 44
def analyze_callsite(callsite_analyzer)
total = callsite_analyzer.analyzed_classes.size
callsite_analyzer.analyzed_classes.each_with_index do |klass_name, i|
puts "Processing class '#{klass_name}', #{i+1} of #{total}"
klass = nil
callsite_analyzer.methods_for_class(klass_name).each do |method_name|
defsite = callsite_analyzer.defsite(klass_method = klass_name + "#" + method_name)
next if IGNORE_FILES.any? { |pattern| defsite.file =~ pattern }
klass ||= Klass.create('name' => klass_name)
line = lines[[defsite.file, defsite.line]]
method = Method.create(
'klass_id' => klass.id,
'name' => method_name,
'defsite_id' => line.id
)
callsite_analyzer.callsites(klass_method).each do |site, count|
callsite = nil
site.backtrace.each_with_index do |frame, i|
file_name = frame[2]
next if IGNORE_FILES.any? { |pattern| file_name =~ pattern }
callsite ||= Callsite.create('method_id' => method.id, 'count' => count)
line = lines[[file_name, number = frame[3]]]
Frame.create('callsite_id' => callsite.id, 'line_id' => line.id, 'level' => i)
end
end
end
end
end
|