{I: rooto:"YARD::CodeObjects::RootObject:@childrenIC:&YARD::CodeObjects::CodeObjectList[o:$YARD::CodeObjects::ModuleObject;IC;[o:&YARD::CodeObjects::ConstantObject:@files[[I"U/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/gem_version.rb:ETi :@current_file_has_commentsF: @name:VERSION:@source_type: ruby:@visibility:public: @tags[�:@docstrings{�:@docstringIC:YARD::Docstring"�;T;[�:@ref_tags[�: @allI"�;T:@unresolved_reference0:@object@ :@namespace@: @pathI"Jacoco::VERSION;F:@sourceI"VERSION = '0.1.10';T:@valueI" '0.1.10';T: @dynamicTo:#YARD::CodeObjects::ClassObject;IC;[o:$YARD::CodeObjects::MethodObject:@module_functionF:@scope: instance;;;I""Jacoco::SAXParser#class_names;F:@parameters[�;[[I"T/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/sax_parser.rb;Ti ; F;:class_names;;;[�;{�;IC;"0Returns the value of attribute class_names. ;T;[�;[�;I"0Returns the value of attribute class_names.;T;0;@:@hash_flagF: @summary0;@;I"'def class_names @class_names end;T:@signatureI"def class_names;T; To;";#F;$;%;;;I"#Jacoco::SAXParser#class_names=;F;&[[I" value;T0;[[@i ; F;:class_names=;;;[�;{�;IC;"#Sets the attribute class_names ;T;[o:YARD::Tags::Tag :@tag_nameI" param;F: @textI"3the value to set the attribute class_names to.;T;I" value;T:@types0;@';[�;I"_Sets the attribute class_names @param value the value to set the attribute class_names to.;T;0;@';(F;)0;@;I"7def class_names=(value) @class_names = value end;T;*I"def class_names=(value);T; To;";#F;$;%;;;I"Jacoco::SAXParser#classes;F;&[�;[[@i ; F;:classes;;;[�;{�;IC;",Returns the value of attribute classes. ;T;[�;[�;I",Returns the value of attribute classes.;T;0;@:;(F;)0;@;I"def classes @classes end;T;*I"def classes;T; To;";#F;$;%;;;I"Jacoco::SAXParser#classes=;F;&[[@+0;[[@i ; F;: classes=;;;[�;{�;IC;"Sets the attribute classes ;T;[o;, ;-I" param;F;.I"/the value to set the attribute classes to.;T;I" value;T;/0;@G;[�;I"WSets the attribute classes @param value the value to set the attribute classes to.;T;0;@G;(F;)0;@;I"/def classes=(value) @classes = value end;T;*I"def classes=(value);T; To;";#F;$;%;;;I"!Jacoco::SAXParser#initialize;F;&[[I"classes;T0;[[@i; F;:initialize;;;[�;{�;IC;"�;T;[o;, ;-I"return;F;.I" a new instance of SAXParser;T;0;/[I"SAXParser;F;@Y;[�;@;0;@Y:@ref_tag_recurse_counti�;@;I"�def initialize(classes) super() @class_names = classes @classes = [] @current_class = nil @subelement_index = 0 end;T;*I"def initialize(classes);T; T:@explicitTo;";#F;$;%;;;I"$Jacoco::SAXParser#start_element;F;&[[I" name;T0[I" attrs;TI"[];T;[[@i; F;:start_element;;;[�;{�;IC;"�;T;[�;[�;@;0;@l;3i�;@;I"�def start_element(name, attrs = []) case name when 'class' start_class(attrs) when 'counter' start_counter(attrs) end @subelement_index += 1 end;T;*I"(def start_element(name, attrs = []);T; T;4To;";#F;$;%;;;I"$Jacoco::SAXParser#start_counter;F;&[[I" attrs;T0;[[@i"; F;:start_counter;;;[�;{�;IC;"�;T;[�;[�;@;0;@};3i�;@;I"4def start_counter(attrs) return unless !@current_class.nil? && @subelement_index == 1 counter = Jacoco::Counter.new counter.type = Hash[attrs]['type'] counter.missed = Hash[attrs]['missed'].to_i counter.covered = Hash[attrs]['covered'].to_i @current_class.counters.push(counter) end;T;*I"def start_counter(attrs);T; T;4To;";#F;$;%;;;I""Jacoco::SAXParser#start_class;F;&[[I" attrs;T0;[[@i-; F;:start_class;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@;I"�def start_class(attrs) @subelement_index = 0 return unless @class_names.include?(Hash[attrs]['name']) c = Jacoco::Class.new c.name = Hash[attrs]['name'] c.counters = [] @current_class = c @classes.push c end;T;*I"def start_class(attrs);T; T;4To;";#F;$;%;;;I"!Jacoco::SAXParser#characters;F;&[[I"string;T0;[[@i9; F;:characters;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@;I" def characters(string); end;T;*I"def characters(string);T; T;4To;";#F;$;%;;;I""Jacoco::SAXParser#end_element;F;&[[I" name;T0;[[@i;; F;:end_element;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@;I"cdef end_element(name) @subelement_index -= 1 @current_class = nil if name.eql? 'class' end;T;*I"def end_element(name);T; T;4T:@owner@:@class_mixinsIC;[�;:@:@instance_mixinsIC;[�;:@:@attributesIC:SymbolHash{: classIC;>{�:@symbolize_valueT;%IC;>{;'IC;>{: read@: write@';@T;0IC;>{;A@:;B@G;@T;@T;@T: @aliases{�:@groups[�;[[@i; T;:SAXParser;;;;;[�;{�;IC;"CSax parser for quickly finding class elements in Jacoco report;T;[�;[�;I"CSax parser for quickly finding class elements in Jacoco report;T;0;@;3i�;(F:@line_rangeo: Range: exclF: begini:endi;@;I"Jacoco::SAXParser;F:@superclasso:YARD::CodeObjects::Proxy:@orignamespace@:@orignameI"!Nokogiri::XML::SAX::Document;T: @imethod0;: Document;o;L;M@;NI"Nokogiri::XML::SAX;T;O0;:SAX;o;L;M@;NI"Nokogiri::XML;T;O0;:XML;o;L;M0;N0;O0;: Nokogiri;@: @obj0: @type0;T0;U0;T0;U0;T0;U;?; To;!;IC;[�;:@�;;IC;[�;:@�;<IC;[o;L;M0;N0;O0;:HappyMapper;@�;T0;U:module;:@�;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"W/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/counter.rb;Ti; T;:Counter;;;;;[�;{�;IC;"Jacoco counter model;T;[�;[�;I"Jacoco counter model;T;0;@�;3i�;(F;Fo;G;HF;Ii;Ji;@;I"Jacoco::Counter;F;Ko;L;M0;N0;O0;:Object;@;T0;U;?; To;!;IC;[�;:@�;;IC;[�;:@�;<IC;[o;L;M0;N0;O0;;V;@�;T0;U;W;:@�;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"V/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/report.rb;Ti ; T;:Report;;;;;[�;{�;IC;"Jacoco report model;T;[�;[�;I"Jacoco report model;T;0;@�;3i�;(F;Fo;G;HF;Ii;Ji;@;I"Jacoco::Report;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@�;;IC;[�;:@�;<IC;[o;L;M0;N0;O0;;V;@�;T0;U;W;:@�;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"U/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/class.rb;Ti; T;: Class;;;;;[�;{�;IC;"Jacoco Class model;T;[�;[�;I"Jacoco Class model;T;0;@�;3i�;(F;Fo;G;HF;Ii ;Ji ;@;I"Jacoco::Class;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@;;IC;[�;:@;<IC;[o;L;M0;N0;O0;;V;@;T0;U;W;:@;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"V/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/method.rb;Ti ; T;:Method;;;;;[�;{�;IC;"Jacoco method model;T;[�;[�;I"Jacoco method model;T;0;@;3i�;(F;Fo;G;HF;Ii;Ji;@;I"Jacoco::Method;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@";;IC;[�;:@";<IC;[o;L;M0;N0;O0;;V;@";T0;U;W;:@";=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"U/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/group.rb;Ti; T;: Group;;;;;[�;{�;IC;"Jacoco group model;T;[�;[�;I"Jacoco group model;T;0;@";3i�;(F;Fo;G;HF;Ii;Ji;@;I"Jacoco::Group;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@8;;IC;[�;:@8;<IC;[o;L;M0;N0;O0;;V;@8;T0;U;W;:@8;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"Z/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/sourcefile.rb;Ti; T;:Sourcefile;;;;;[�;{�;IC;"Jacoco sourcefile model;T;[�;[�;I"Jacoco sourcefile model;T;0;@8;3i�;(F;Fo;G;HF;Ii;Ji;@;I"Jacoco::Sourcefile;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@N;;IC;[�;:@N;<IC;[o;L;M0;N0;O0;;V;@N;T0;U;W;:@N;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"\/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/session_info.rb;Ti; T;:SessionInfo;;;;;[�;{�;IC;"Jacoco sessioninfo model;T;[�;[�;I"Jacoco sessioninfo model;T;0;@N;3i�;(F;Fo;G;HF;Ii;Ji;@;I"Jacoco::SessionInfo;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@d;;IC;[�;:@d;<IC;[o;L;M0;N0;O0;;V;@d;T0;U;W;:@d;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"T/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/line.rb;Ti; T;: Line;;;;;[�;{�;IC;"Jacoco line model;T;[�;[�;I"Jacoco line model;T;0;@d;3i�;(F;Fo;G;HF;Ii ;Ji ;@;I"Jacoco::Line;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[�;:@z;;IC;[�;:@z;<IC;[o;L;M0;N0;O0;;V;@z;T0;U;W;:@z;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[I"W/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/package.rb;Ti; T;:Package;;;;;[�;{�;IC;"Jacoco package model;T;[�;[�;I"Jacoco package model;T;0;@z;3i�;(F;Fo;G;HF;Ii ;Ji ;@;I"Jacoco::Package;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; To;!;IC;[ o;";#F;$;?;;;I" Jacoco::DOMParser.read_path;F;&[[I" path;T0;[[I"T/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/dom_parser.rb;Ti; F;:read_path;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@�;I"Adef self.read_path(path) DOMParser.new.read_path(path) end;T;*I"def read_path(path);T; T;4To;";#F;$;?;;;I""Jacoco::DOMParser.read_string;F;&[[I"string;T0;[[@�i; F;:read_string;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@�;I"Idef self.read_string(string) DOMParser.new.read_string(string) end;T;*I"def read_string(string);T; T;4To;";#F;$;%;;;I" Jacoco::DOMParser#read_path;F;&[[I" path;T0;[[@�i; F;;b;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@�;I"Idef read_path(path) file = File.read(path) read_string(file) end;T;*I"def read_path(path);T; T;4To;";#F;$;%;;;I""Jacoco::DOMParser#read_string;F;&[[I"string;T0;[[@�i; F;;c;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@�;I"7def read_string(string) Report.parse(string) end;T;*I"def read_string(string);T; T;4T;:@�;;IC;[�;:@�;<IC;[�;:@�;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[@�i ; T;:DOMParser;;;;;[�;{�;IC;"!DOM parser for Jacoco report;T;[�;[�;I"!DOM parser for Jacoco report;T;0;@�;3i�;(F;Fo;G;HF;Ii ;Ji ;@;I"Jacoco::DOMParser;F;Ko;L;M0;N0;O0;;Y;@;T0;U;?; T;:@;;IC;[�;:@;<IC;[�;:@;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[@ i[@i [@�i [@�i[@i[@i[@.i [@Di [@Zi [@pi[@�i[@�i; F;:Jacoco;;;;;[�;{�;IC;"�;T;[�;[�;@;0;@;3i�;@;I"Jacoco;Fo; ;IC;[o;!;IC;[+o;";#F;$;%;;;I"=Danger::DangerJacoco#minimum_project_coverage_percentage;F;&[�;[[I"P/Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/plugin.rb;Ti; T;:(minimum_project_coverage_percentage;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;I"(rubocop:disable Metrics/ClassLength;T;0;@�;(F;Fo;G;HF;Ii;Ji;@�;I"Wdef minimum_project_coverage_percentage @minimum_project_coverage_percentage end;T;*I",def minimum_project_coverage_percentage;T; To;";#F;$;%;;;I">Danger::DangerJacoco#minimum_project_coverage_percentage=;F;&[[@+0;[[@�i; T;:)minimum_project_coverage_percentage=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@ ;(F;F@;@�;I"gdef minimum_project_coverage_percentage=(value) @minimum_project_coverage_percentage = value end;T;*I"4def minimum_project_coverage_percentage=(value);T; To;";#F;$;%;;;I";Danger::DangerJacoco#minimum_class_coverage_percentage;F;&[�;[[@�i; T;:&minimum_class_coverage_percentage;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@;(F;F@;@�;I"Sdef minimum_class_coverage_percentage @minimum_class_coverage_percentage end;T;*I"*def minimum_class_coverage_percentage;T; To;";#F;$;%;;;I"<Danger::DangerJacoco#minimum_class_coverage_percentage=;F;&[[@+0;[[@�i; T;:'minimum_class_coverage_percentage=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@#;(F;F@;@�;I"cdef minimum_class_coverage_percentage=(value) @minimum_class_coverage_percentage = value end;T;*I"2def minimum_class_coverage_percentage=(value);T; To;";#F;$;%;;;I".Danger::DangerJacoco#only_check_new_files;F;&[�;[[@�i; T;:only_check_new_files;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@0;(F;F@;@�;I"9def only_check_new_files @only_check_new_files end;T;*I"def only_check_new_files;T; To;";#F;$;%;;;I"/Danger::DangerJacoco#only_check_new_files=;F;&[[@+0;[[@�i; T;:only_check_new_files=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@<;(F;F@;@�;I"Idef only_check_new_files=(value) @only_check_new_files = value end;T;*I"%def only_check_new_files=(value);T; To;";#F;$;%;;;I")Danger::DangerJacoco#files_extension;F;&[�;[[@�i; T;:files_extension;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@I;(F;F@;@�;I"/def files_extension @files_extension end;T;*I"def files_extension;T; To;";#F;$;%;;;I"*Danger::DangerJacoco#files_extension=;F;&[[@+0;[[@�i; T;:files_extension=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@U;(F;F@;@�;I"?def files_extension=(value) @files_extension = value end;T;*I" def files_extension=(value);T; To;";#F;$;%;;;I"6Danger::DangerJacoco#minimum_package_coverage_map;F;&[�;[[@�i; T;:!minimum_package_coverage_map;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@b;(F;F@;@�;I"Idef minimum_package_coverage_map @minimum_package_coverage_map end;T;*I"%def minimum_package_coverage_map;T; To;";#F;$;%;;;I"7Danger::DangerJacoco#minimum_package_coverage_map=;F;&[[@+0;[[@�i; T;:"minimum_package_coverage_map=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@n;(F;F@;@�;I"Ydef minimum_package_coverage_map=(value) @minimum_package_coverage_map = value end;T;*I"-def minimum_package_coverage_map=(value);T; To;";#F;$;%;;;I"4Danger::DangerJacoco#minimum_class_coverage_map;F;&[�;[[@�i; T;:minimum_class_coverage_map;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@{;(F;F@;@�;I"Edef minimum_class_coverage_map @minimum_class_coverage_map end;T;*I"#def minimum_class_coverage_map;T; To;";#F;$;%;;;I"5Danger::DangerJacoco#minimum_class_coverage_map=;F;&[[@+0;[[@�i; T;: minimum_class_coverage_map=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"Udef minimum_class_coverage_map=(value) @minimum_class_coverage_map = value end;T;*I"+def minimum_class_coverage_map=(value);T; To;";#F;$;%;;;I"5Danger::DangerJacoco#fail_no_coverage_data_found;F;&[�;[[@�i; T;: fail_no_coverage_data_found;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"Gdef fail_no_coverage_data_found @fail_no_coverage_data_found end;T;*I"$def fail_no_coverage_data_found;T; To;";#F;$;%;;;I"6Danger::DangerJacoco#fail_no_coverage_data_found=;F;&[[@+0;[[@�i; T;:!fail_no_coverage_data_found=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"Wdef fail_no_coverage_data_found=(value) @fail_no_coverage_data_found = value end;T;*I",def fail_no_coverage_data_found=(value);T; To;";#F;$;%;;;I"Danger::DangerJacoco#title;F;&[�;[[@�i; T;: title;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"def title @title end;T;*I"def title;T; To;";#F;$;%;;;I" Danger::DangerJacoco#title=;F;&[[@+0;[[@�i; T;:title=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"+def title=(value) @title = value end;T;*I"def title=(value);T; To;";#F;$;%;;;I",Danger::DangerJacoco#class_column_title;F;&[�;[[@�i; T;:class_column_title;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"5def class_column_title @class_column_title end;T;*I"def class_column_title;T; To;";#F;$;%;;;I"-Danger::DangerJacoco#class_column_title=;F;&[[@+0;[[@�i; T;:class_column_title=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"Edef class_column_title=(value) @class_column_title = value end;T;*I"#def class_column_title=(value);T; To;";#F;$;%;;;I"*Danger::DangerJacoco#subtitle_success;F;&[�;[[@�i; T;:subtitle_success;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"1def subtitle_success @subtitle_success end;T;*I"def subtitle_success;T; To;";#F;$;%;;;I"+Danger::DangerJacoco#subtitle_success=;F;&[[@+0;[[@�i; T;:subtitle_success=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"Adef subtitle_success=(value) @subtitle_success = value end;T;*I"!def subtitle_success=(value);T; To;";#F;$;%;;;I"*Danger::DangerJacoco#subtitle_failure;F;&[�;[[@�i; T;:subtitle_failure;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@�;(F;F@;@�;I"1def subtitle_failure @subtitle_failure end;T;*I"def subtitle_failure;T; To;";#F;$;%;;;I"+Danger::DangerJacoco#subtitle_failure=;F;&[[@+0;[[@�i; T;:subtitle_failure=;;;[�;{�;IC;"(rubocop:disable Metrics/ClassLength ;T;[�;[�;@;0;@;(F;F@;@�;I"Adef subtitle_failure=(value) @subtitle_failure = value end;T;*I"!def subtitle_failure=(value);T; To;";#F;$;%;;;I"Danger::DangerJacoco#setup;F;&[�;[[@�i!; T;: setup;;;[�;{�;IC;"AInitialize the plugin with configured parameters or defaults;T;[�;[�;I"AInitialize the plugin with configured parameters or defaults;T;0;@;3i�;(F;Fo;G;HF;Ii ;Ji ;@�;I"�def setup setup_minimum_coverages setup_texts @only_check_new_files = false unless only_check_new_files @files_extension = ['.kt', '.java'] unless files_extension end;T;*I"def setup;T; T;4To;";#F;$;%;;;I"%Danger::DangerJacoco#setup_texts;F;&[�;[[@�i); T;:setup_texts;;;[�;{�;IC;"9Initialize the plugin with configured optional texts;T;[�;[�;I"9Initialize the plugin with configured optional texts;T;0;@;3i�;(F;Fo;G;HF;Ii(;Ji(;@�;I"Udef setup_texts @title = 'JaCoCo' unless title @class_column_title = 'Class' unless class_column_title @subtitle_success = 'All classes meet coverage requirement. Well done! :white_check_mark:' unless subtitle_success @subtitle_failure = 'There are classes that do not meet coverage requirement :warning:' unless subtitle_failure end;T;*I"def setup_texts;T; T;4To;";#F;$;%;;;I"1Danger::DangerJacoco#setup_minimum_coverages;F;&[�;[[@�i1; T;:setup_minimum_coverages;;;[�;{�;IC;"RInitialize the plugin with configured coverage minimum parameters or defaults;T;[�;[�;I"RInitialize the plugin with configured coverage minimum parameters or defaults;T;0;@-;3i�;(F;Fo;G;HF;Ii0;Ji0;@�;I"Udef setup_minimum_coverages @minimum_project_coverage_percentage = 0 unless minimum_project_coverage_percentage @minimum_class_coverage_percentage = 0 unless minimum_class_coverage_percentage @minimum_package_coverage_map = {} unless minimum_package_coverage_map @minimum_class_coverage_map = {} unless minimum_class_coverage_map end;T;*I" def setup_minimum_coverages;T; T;4To;";#F;$;%;;;I"Danger::DangerJacoco#parse;F;&[[I" path;T0;[[@�i=; T;: parse;;;[�;{�;IC;"hParses the xml output of jacoco to Ruby model classes This is slow since it's basically DOM parsing;T;[�;[�;I"�Parses the xml output of jacoco to Ruby model classes This is slow since it's basically DOM parsing @path path to the xml output of jacoco ;T;0;@;;3i�;(F;Fo;G;HF;Ii8;Ji<;@�;I"<def parse(path) Jacoco::DOMParser.read_path(path) end;T;*I"def parse(path);T; T;4To;";#F;$;%;;;I" Danger::DangerJacoco#report;F;&[ [I" path;T0[I"report_url;TI"'';T[I"delimiter;TI"%r{/java/|/kotlin/};T[I"!fail_no_coverage_data_found:;TI" true;T;[[@�iS; T;:report;;;[�;{�;IC;"This is a fast report based on SAX parser changed files. We need to get the class from this path to check the Jacoco report, e.g. src/java/com/example/SomeJavaClass.java -> com/example/SomeJavaClass e.g. src/kotlin/com/example/SomeKotlinClass.kt -> com/example/SomeKotlinClass The default value supposes that you're using gradle structure, that is your path to source files is something like Java => blah/blah/java/slashed_package/Source.java Kotlin => blah/blah/kotlin/slashed_package/Source.kt rubocop:disable Style/AbcSize;T;[�;[�;I"�This is a fast report based on SAX parser @path path to the xml output of jacoco @report_url URL where html report hosted @delimiter git.modified_files returns full paths to the changed files. We need to get the class from this path to check the Jacoco report, e.g. src/java/com/example/SomeJavaClass.java -> com/example/SomeJavaClass e.g. src/kotlin/com/example/SomeKotlinClass.kt -> com/example/SomeKotlinClass The default value supposes that you're using gradle structure, that is your path to source files is something like Java => blah/blah/java/slashed_package/Source.java Kotlin => blah/blah/kotlin/slashed_package/Source.kt rubocop:disable Style/AbcSize;T;0;@K;3i�;(F;Fo;G;HF;IiA;JiR;@�;I"�def report(path, report_url = '', delimiter = %r{/java/|/kotlin/}, fail_no_coverage_data_found: true) @fail_no_coverage_data_found = fail_no_coverage_data_found setup classes = classes(delimiter) parser = Jacoco::SAXParser.new(classes) Nokogiri::XML::SAX::Parser.new(parser).parse(File.open(path)) total_covered = total_coverage(path) header = "### #{title} Code Coverage #{total_covered[:covered]}% #{total_covered[:status]}\n" report_markdown = header report_markdown += "| #{class_column_title} | Covered | Required | Status |\n" report_markdown += "|:---|:---:|:---:|:---:|\n" class_coverage_above_minimum = markdown_class(parser, report_markdown, report_url) subtitle = class_coverage_above_minimum ? subtitle_success : subtitle_failure report_markdown.insert(header.length, "#### #{subtitle}\n") markdown(report_markdown) report_fails(class_coverage_above_minimum, total_covered) end;T;*I"jdef report(path, report_url = '', delimiter = %r{/java/|/kotlin/}, fail_no_coverage_data_found: true);T; T;4To;";#F;$;%;;;I"!Danger::DangerJacoco#classes;F;&[[I"delimiter;T0;[[@�im; T;;0;;;[�;{�;IC;"ySelect either only added files or modified and added files in this PR, depending on "only_check_new_files" attribute;T;[�;[�;I"ySelect either only added files or modified and added files in this PR, depending on "only_check_new_files" attribute;T;0;@d;3i�;(F;Fo;G;HF;Iik;Jil;@�;I"Jdef classes(delimiter) git = @dangerfile.git affected_files = only_check_new_files ? git.added_files : git.added_files + git.modified_files affected_files.select { |file| files_extension.reduce(false) { |state, el| state || file.end_with?(el) } } .map { |file| file.split('.').first.split(delimiter)[1] } end;T;*I"def classes(delimiter);T; T;4To;";#F;$;%;;;I"&Danger::DangerJacoco#report_class;F;&[[I"jacoco_class;T0;[[@�iu; T;:report_class;;;[�;{�;IC;"JIt returns a specific class code coverage and an emoji status as well;T;[�;[�;I"JIt returns a specific class code coverage and an emoji status as well;T;0;@t;3i�;(F;Fo;G;HF;Iit;Jit;@�;I"hdef report_class(jacoco_class) report_result = { covered: 'No coverage data found : -', status: ':black_joker:', required_coverage_percentage: 'No coverage data found : -' } counter = coverage_counter(jacoco_class) unless counter.nil? coverage = (counter.covered.fdiv(counter.covered + counter.missed) * 100).floor required_coverage = required_class_coverage(jacoco_class) status = coverage_status(coverage, required_coverage) report_result = { covered: coverage, status: status, required_coverage_percentage: required_coverage } end report_result end;T;*I"#def report_class(jacoco_class);T; T;4To;";#F;$;%;;;I"1Danger::DangerJacoco#required_class_coverage;F;&[[I"jacoco_class;T0;[[@�i�; T;:required_class_coverage;;;[�;{�;IC;"3Determines the required coverage for the class;T;[�;[�;I"3Determines the required coverage for the class;T;0;@�;3i�;(F;Fo;G;HF;Ii�;Ji�;@�;I"�def required_class_coverage(jacoco_class) key = minimum_class_coverage_map.keys.detect { |k| jacoco_class.name.match(k) } || jacoco_class.name required_coverage = minimum_class_coverage_map[key] required_coverage = package_coverage(jacoco_class.name) if required_coverage.nil? required_coverage = minimum_class_coverage_percentage if required_coverage.nil? required_coverage end;T;*I".def required_class_coverage(jacoco_class);T; T;4To;";#F;$;%;;;I"*Danger::DangerJacoco#package_coverage;F;&[[I"class_name;T0;[[@�i�; T;:package_coverage;;;[�;{�;IC;"Jit returns the most suitable coverage by package name to class or nil;T;[�;[�;I"Jit returns the most suitable coverage by package name to class or nil;T;0;@�;3i�;(F;Fo;G;HF;Ii�;Ji�;@�;I"Idef package_coverage(class_name) path = class_name package_parts = class_name.split('/') package_parts.reverse_each do |item| size = item.size path = path[0...-size] coverage = minimum_package_coverage_map[path] path = path[0...-1] unless path.empty? return coverage unless coverage.nil? end nil end;T;*I"%def package_coverage(class_name);T; T;4To;";#F;$;%;;;I")Danger::DangerJacoco#coverage_status;F;&[[I" coverage;T0[I"minimum_percentage;T0;[[@�i�; T;:coverage_status;;;[�;{�;IC;",it returns an emoji for coverage status;T;[�;[�;I",it returns an emoji for coverage status;T;0;@�;3i�;(F;Fo;G;HF;Ii�;Ji�;@�;I"�def coverage_status(coverage, minimum_percentage) if coverage < (minimum_percentage / 2) then ':skull:' elsif coverage < minimum_percentage then ':warning:' else ':white_check_mark:' end end;T;*I"6def coverage_status(coverage, minimum_percentage);T; T;4To;";#F;$;%;;;I"(Danger::DangerJacoco#total_coverage;F;&[[I"report_path;T0;[[@�i�; T;:total_coverage;;;[�;{�;IC;"JIt returns total of project code coverage and an emoji status as well;T;[�;[�;I"JIt returns total of project code coverage and an emoji status as well;T;0;@�;3i�;(F;Fo;G;HF;Ii�;Ji�;@�;I"^def total_coverage(report_path) jacoco_report = Nokogiri::XML(File.open(report_path)) report = jacoco_report.xpath('report/counter').select { |item| item['type'] == 'INSTRUCTION' } missed_instructions = report.first['missed'].to_f covered_instructions = report.first['covered'].to_f total_instructions = missed_instructions + covered_instructions covered_percentage = (covered_instructions * 100 / total_instructions).round(2) coverage_status = coverage_status(covered_percentage, minimum_project_coverage_percentage) { covered: covered_percentage, status: coverage_status } end;T;*I"$def total_coverage(report_path);T; T;4To;";#F;$;%;:private;I"*Danger::DangerJacoco#coverage_counter;F;&[[I"jacoco_class;T0;[[@�i�; F;:coverage_counter;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@�;I"�def coverage_counter(jacoco_class) all_class_counters = jacoco_class.counters counter = class_counter(all_class_counters) if counter.nil? no_coverage_data_found_message = "No coverage data found for #{jacoco_class.name}" raise no_coverage_data_found_message if @fail_no_coverage_data_found.instance_of?(TrueClass) warn no_coverage_data_found_message end counter end;T;*I"'def coverage_counter(jacoco_class);T; T;4To;";#F;$;%;;�;I"'Danger::DangerJacoco#class_counter;F;&[[I"all_class_counters;T0;[[@�i�; F;:class_counter;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@�;I"�def class_counter(all_class_counters) instruction_counter = all_class_counters.detect { |e| e.type.eql? 'INSTRUCTION' } branch_counter = all_class_counters.detect { |e| e.type.eql? 'BRANCH' } line_counter = all_class_counters.detect { |e| e.type.eql? 'LINE' } if !instruction_counter.nil? instruction_counter elsif !branch_counter.nil? branch_counter else line_counter end end;T;*I"*def class_counter(all_class_counters);T; T;4To;";#F;$;%;;�;I"&Danger::DangerJacoco#report_fails;F;&[[I"!class_coverage_above_minimum;T0[I"total_covered;T0;[[@�i�; T;:report_fails;;;[�;{�;IC;"*rubocop:disable Style/SignalException;T;[�;[�;I"*rubocop:disable Style/SignalException;T;0;@�;3i�;(F;Fo;G;HF;Ii�;Ji�;@�;I"def report_fails(class_coverage_above_minimum, total_covered) if total_covered[:covered] < minimum_project_coverage_percentage # fail danger if total coverage is smaller than minimum_project_coverage_percentage covered = total_covered[:covered] fail("Total coverage of #{covered}%. Improve this to at least #{minimum_project_coverage_percentage}%") end return if class_coverage_above_minimum fail("Class coverage is below minimum. Improve to at least #{minimum_class_coverage_percentage}%") end;T;*I"Bdef report_fails(class_coverage_above_minimum, total_covered);T; T;4To;";#F;$;%;;�;I"(Danger::DangerJacoco#markdown_class;F;&[[I"parser;T0[I"report_markdown;T0[I"report_url;T0;[[@�i�; T;:markdown_class;;;[�;{�;IC;")rubocop:enable Style/SignalException;T;[�;[�;I")rubocop:enable Style/SignalException;T;0;@�;3i�;(F;Fo;G;HF;Ii�;Ji�;@�;I"�def markdown_class(parser, report_markdown, report_url) class_coverage_above_minimum = true parser.classes.each do |jacoco_class| # Check metrics for each classes rp = report_class(jacoco_class) rl = report_link(jacoco_class.name, report_url) ln = "| #{rl} | #{rp[:covered]}% | #{rp[:required_coverage_percentage]}% | #{rp[:status]} |\n" report_markdown << ln class_coverage_above_minimum &&= rp[:covered] >= rp[:required_coverage_percentage] end class_coverage_above_minimum end;T;*I"<def markdown_class(parser, report_markdown, report_url);T; T;4To;";#F;$;%;;�;I"%Danger::DangerJacoco#report_link;F;&[[I"class_name;T0[I"report_url;T0;[[@�i�; F;:report_link;;;[�;{�;IC;"�;T;[�;[�;@;0;@;3i�;@�;I"�def report_link(class_name, report_url) if report_url.empty? "`#{class_name}`" else report_filepath = "#{class_name.gsub(%r{/(?=[^/]*/.)}, '.')}.html" "[`#{class_name}`](#{report_url + report_filepath})" end end;T;*I",def report_link(class_name, report_url);T; T;4T;:@�;;IC;[�;:@�;<IC;[�;:@�;=IC;>{;?IC;>{�;@T;%IC;>{;fIC;>{;A@�;B@ ;@T;hIC;>{;A@;B@#;@T;jIC;>{;A@0;B@<;@T;lIC;>{;A@I;B@U;@T;nIC;>{;A@b;B@n;@T;pIC;>{;A@{;B@�;@T;rIC;>{;A@�;B@�;@T;tIC;>{;A@�;B@�;@T;vIC;>{;A@�;B@�;@T;xIC;>{;A@�;B@�;@T;zIC;>{;A@�;B@;@T;@T;@T;C{�;D[�;[[@�i; T;:DangerJacoco;;;;;[�;{�;IC;"|Verify code coverage inside your projects This is done using the jacoco output Results are passed out as a table in markdown;T;[ o;, ;-I"example;F;.I"4jacoco.minimum_project_coverage_percentage = 50;T;I"Verify coverage;T;/0;@�o;, ;-I"example;F;.I"�jacoco.minimum_package_coverage_map = { # optional (default is empty) 'com/package/' => 55, 'com/package/more/specific/' => 15 };T;I" Verify coverage per package;T;/0;@�o;, ;-I"see;F;.I"Malinskiy/danger-jacoco;T;I" Anton;T;/0;@�o;, ;-I" tags;F;.I",jacoco, coverage, java, android, kotlin;T;0;/0;@�;[�;I"�Verify code coverage inside your projects This is done using the jacoco output Results are passed out as a table in markdown @example Verify coverage jacoco.minimum_project_coverage_percentage = 50 @example Verify coverage per package jacoco.minimum_package_coverage_map = { # optional (default is empty) 'com/package/' => 55, 'com/package/more/specific/' => 15 } @see Anton Malinskiy/danger-jacoco @tags jacoco, coverage, java, android, kotlin ;T;0;@�;3i�;(F;Fo;G;HF;Ii;Ji;@�;I"Danger::DangerJacoco;F;Ko;L;M0;N0;O0;:Plugin;@�;T0;U;?; T;:@�;;IC;[�;:@�;<IC;[�;:@�;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[[@�i ; F;:Danger;;;;;[�;{�;IC;"�;T;[�;[�;@;0;@�;3i�;@;I"Danger;F;:@;;IC;[�;:@;<IC;[�;:@;=IC;>{;?IC;>{�;@T;%IC;>{�;@T;@T;C{�;D[�;[�; F;;�;;;;;[�;{�;IC;"�;T;[�;[�;@;0;@;3i�;0;@;e@:Jacoco::VERSION@ ;�@�:Danger::DangerJacoco@�:=Danger::DangerJacoco#minimum_project_coverage_percentage@�:>Danger::DangerJacoco#minimum_project_coverage_percentage=@ :;Danger::DangerJacoco#minimum_class_coverage_percentage@:<Danger::DangerJacoco#minimum_class_coverage_percentage=@#:.Danger::DangerJacoco#only_check_new_files@0:/Danger::DangerJacoco#only_check_new_files=@<:)Danger::DangerJacoco#files_extension@I:*Danger::DangerJacoco#files_extension=@U:6Danger::DangerJacoco#minimum_package_coverage_map@b:7Danger::DangerJacoco#minimum_package_coverage_map=@n:4Danger::DangerJacoco#minimum_class_coverage_map@{:5Danger::DangerJacoco#minimum_class_coverage_map=@�:5Danger::DangerJacoco#fail_no_coverage_data_found@�:6Danger::DangerJacoco#fail_no_coverage_data_found=@�:Danger::DangerJacoco#title@�: Danger::DangerJacoco#title=@�:,Danger::DangerJacoco#class_column_title@�:-Danger::DangerJacoco#class_column_title=@�:*Danger::DangerJacoco#subtitle_success@�:+Danger::DangerJacoco#subtitle_success=@�:*Danger::DangerJacoco#subtitle_failure@�:+Danger::DangerJacoco#subtitle_failure=@:Danger::DangerJacoco#setup@:%Danger::DangerJacoco#setup_texts@:1Danger::DangerJacoco#setup_minimum_coverages@-:Danger::DangerJacoco#parse@;: Danger::DangerJacoco#report@K:!Danger::DangerJacoco#classes@d:&Danger::DangerJacoco#report_class@t:1Danger::DangerJacoco#required_class_coverage@�:*Danger::DangerJacoco#package_coverage@�:)Danger::DangerJacoco#coverage_status@�:(Danger::DangerJacoco#total_coverage@�:*Danger::DangerJacoco#coverage_counter@�:'Danger::DangerJacoco#class_counter@�:&Danger::DangerJacoco#report_fails@�:(Danger::DangerJacoco#markdown_class@�:%Danger::DangerJacoco#report_link@:Jacoco::SAXParser@:"Jacoco::SAXParser#class_names@:#Jacoco::SAXParser#class_names=@':Jacoco::SAXParser#classes@::Jacoco::SAXParser#classes=@G:!Jacoco::SAXParser#initialize@Y:$Jacoco::SAXParser#start_element@l:$Jacoco::SAXParser#start_counter@}:"Jacoco::SAXParser#start_class@�:!Jacoco::SAXParser#characters@�:"Jacoco::SAXParser#end_element@�:Jacoco::Counter@�:Jacoco::Report@�:Jacoco::Class@�:Jacoco::Method@:Jacoco::Group@":Jacoco::Sourcefile@8:Jacoco::SessionInfo@N:Jacoco::Line@d:Jacoco::Package@z:Jacoco::DOMParser@�: Jacoco::DOMParser.read_path@�:"Jacoco::DOMParser.read_string@�: Jacoco::DOMParser#read_path@�:"Jacoco::DOMParser#read_string@�