From 088a949403c30b12c90be603162e19742742d8e6 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 4 Dec 2019 15:14:19 +0300 Subject: [PATCH] [FIR] Add implicit type counter to html dump --- .../jetbrains/kotlin/fir/dump/colors.dark.css | 6 ++++ .../kotlin/fir/dump/colors.white.css | 6 ++++ .../jetbrains/kotlin/fir/dump/HtmlFirDump.kt | 28 ++++++++++++++----- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.dark.css b/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.dark.css index 6d16af33e75..145d9cc252d 100644 --- a/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.dark.css +++ b/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.dark.css @@ -82,6 +82,12 @@ body.dark { .dark .error-counter { color: #ff1010; + padding-left: 15px; +} + +.dark .implicit-counter { + color: aqua; + padding-left: 15px; } .dark .diagnostic-hover { diff --git a/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.white.css b/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.white.css index 35ce561ea83..ba9a7f88388 100644 --- a/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.white.css +++ b/compiler/fir/dump/resources/org/jetbrains/kotlin/fir/dump/colors.white.css @@ -72,6 +72,12 @@ .white .error-counter { color: #f00; + padding-left: 15px; +} + +.white .implicit-counter { + color: aqua; + padding-left: 15px; } .white .diagnostic-hover { diff --git a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt index 50c0b9c840a..4f80dea7dd9 100644 --- a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt +++ b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt @@ -79,6 +79,7 @@ private class PackageInfo(val fqName: FqName, val moduleInfo: ModuleInfo) { it.mkdirs() } val errors = mutableMapOf().withDefault { 0 } + val implicits = mutableMapOf().withDefault { 0 } } private class ModuleInfo(val name: String, outputRoot: File) { @@ -89,6 +90,9 @@ private class ModuleInfo(val name: String, outputRoot: File) { val errors: Map by lazy { packages.mapValues { (_, packageInfo) -> packageInfo.errors.values.sum() }.withDefault { 0 } } + val implicits: Map by lazy { + packages.mapValues { (_, packageInfo) -> packageInfo.implicits.values.sum() }.withDefault { 0 } + } } private class SupplementaryGenerator(val outputRoot: File) { @@ -118,7 +122,7 @@ private class SupplementaryGenerator(val outputRoot: File) { ) { +packageInfo.fqName.asString() } - addErrors(moduleInfo.errors.getValue(packageInfo.fqName)) + addErrors(moduleInfo.errors.getValue(packageInfo.fqName), moduleInfo.implicits.getValue(packageInfo.fqName)) } } } @@ -126,10 +130,13 @@ private class SupplementaryGenerator(val outputRoot: File) { } } - fun LI.addErrors(errors: Int) { + fun LI.addErrors(errors: Int, implicits: Int) { if (errors > 0) { span(classes = "error-counter") { +(errors.toString()) } } + if (implicits > 0) { + span(classes = "implicit-counter") { +(implicits.toString()) } + } } fun linkToIndex(moduleInfo: ModuleInfo, from: File): String { @@ -167,7 +174,7 @@ private class SupplementaryGenerator(val outputRoot: File) { for (file in packageInfo.contents) { li { a(href = "./$file.fir.html", classes = "container-ref") { +file } - addErrors(packageInfo.errors.getValue(file)) + addErrors(packageInfo.errors.getValue(file), packageInfo.implicits.getValue(file)) } } } @@ -190,7 +197,7 @@ private class SupplementaryGenerator(val outputRoot: File) { for (module in modules) { li { a(href = linkToIndex(module, outputRoot), classes = "container-ref") { +module.name } - addErrors(module.errors.values.sum()) + addErrors(module.errors.values.sum(), module.implicits.values.sum()) } } } @@ -296,6 +303,7 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) { dumpOutput.writeText(builder.toString()) packageForFile(file).apply { errors[file.name] = dumper.errors + implicits[file.name] = dumper.implicits } } @@ -395,12 +403,15 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver var errors: Int = 0 private set - fun generate(element: FirFile, builder: StringBuilder): Int { + var implicits: Int = 0 + private set + + fun generate(element: FirFile, builder: StringBuilder) { errors = 0 + implicits = 0 builder.appendHTML().html { generate(element) } - return errors } private fun FlowContent.keyword(text: String) { @@ -794,7 +805,10 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver when (typeRef) { is FirErrorTypeRef -> error { +typeRef.diagnostic.reason } is FirResolvedTypeRef -> generate(typeRef.type) - is FirImplicitTypeRef -> unresolved { keyword("") } + is FirImplicitTypeRef -> unresolved { + implicits++ + keyword("") + } is FirUserTypeRef -> unresolved { generateList(typeRef.qualifier, separator = ".") { simpleName(it.name)