")
+
+ report.append("\n\t\t| " + number + " | ")
+
+ report.append("\n\t\t" + analyzer + " | ")
+
+ report.append("\n\t\t")
+ if (analyzer == "Lint") {
+ report.append("\n\t\t\t" + description + " (" + errorId + ")")
+ } else if (analyzer == "Detekt") {
+ report.append("\n\t\t\t" + description + " (" + errorId + ")")
+ } else {
+ report.append("\n\t\t\t" + description + " (" + errorId + ")")
+ }
+ report.append("\n\t\t | ")
+
+ def indexOfSrc = file.indexOf("src")
+ def deeplink = (indexOfSrc > 0 ? file.substring(indexOfSrc) : file).replace('\\', '/')
+ report.append("\n\t\t")
+ report.append("\n\t\t\t" + file + ":" + line + "")
+ report.append("\n\t\t | ")
+
+ report.append("\n\t
")
+ println("\n\u001B[31m" + number + " " + analyzer + ": " + description + " (" + errorId + ")\n\tat " + file + ":" + line + "\u001B[0m")
+}
+
+appendKotlinErrors = { report, count, checkstyleFile ->
+ def rootNode = new XmlParser().parse(checkstyleFile)
+ for (def fileNode : rootNode.children()) {
+ if (!fileNode.name().equals("file")) {
+ continue
+ }
+
+ for (def errorNode : fileNode.children()) {
+ if (!errorNode.name().equals("error")) {
+ continue
+ }
+ count++
+
+ def error = errorNode.attribute("source")
+ appendError(report, count, "Detekt", fileNode.attribute("name"), errorNode.attribute("line"), error, "", errorNode.attribute("message"))
+ }
+ }
+ return count
+}
+
+appendCpdErrors = { report, count, cpdFile ->
+ def rootNode = new XmlParser().parse(cpdFile)
+ for (def duplicationNode : rootNode.children()) {
+ if (!duplicationNode.name().equals("duplication")) {
+ continue
+ }
+ count++
+
+ report.append("\n\t