From ddc6c70611a97c6d07a50db67709ced113e06ca0 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 8 Sep 2021 16:29:52 +0300 Subject: [PATCH] [FE 1.0] Move diagnostic parameter renderers to common module --- .../FirDiagnosticParameterRenderer.kt | 10 +++ .../rendering/DiagnosticParameterRenderer.kt | 0 .../diagnostics/rendering/RenderingContext.kt | 37 +++++++++++ .../diagnostics/rendering/RenderingContext.kt | 64 ------------------- .../rendering/RenderingContextUtils.kt | 20 ++++++ 5 files changed, 67 insertions(+), 64 deletions(-) create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticParameterRenderer.kt rename compiler/{frontend => frontend.common}/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt (100%) create mode 100644 compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt delete mode 100644 compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContextUtils.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticParameterRenderer.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticParameterRenderer.kt new file mode 100644 index 00000000000..cd21638cc6b --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticParameterRenderer.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.diagnostics + +fun interface FirDiagnosticParameterRenderer { + fun render(obj: O): String +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt similarity index 100% rename from compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt rename to compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt new file mode 100644 index 00000000000..dc217776f78 --- /dev/null +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.diagnostics.rendering + +// holds data about the parameters of the diagnostic we're about to render +sealed class RenderingContext { + abstract operator fun get(key: Key): T + + abstract class Key(val name: String) { + abstract fun compute(objectsToRender: Collection): T + } + + class Impl(private val objectsToRender: Collection) : RenderingContext() { + private val data = linkedMapOf, Any?>() + + @Suppress("UNCHECKED_CAST") + override fun get(key: Key): T { + return data[key] as? T ?: key.compute(objectsToRender).also { data[key] = it } + } + } + + object Empty : RenderingContext() { + override fun get(key: Key): T { + return key.compute(emptyList()) + } + } + + companion object { + @JvmStatic + fun of(vararg objectsToRender: Any?): RenderingContext { + return Impl(objectsToRender.toList()) + } + } +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt deleted file mode 100644 index 0cddb16865b..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContext.kt +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering - -import org.jetbrains.kotlin.diagnostics.* - -// holds data about the parameters of the diagnostic we're about to render -sealed class RenderingContext { - abstract operator fun get(key: Key): T - - abstract class Key(val name: String) { - abstract fun compute(objectsToRender: Collection): T - } - - class Impl(private val objectsToRender: Collection) : RenderingContext() { - private val data = linkedMapOf, Any?>() - - @Suppress("UNCHECKED_CAST") - override fun get(key: Key): T { - return data[key] as? T ?: key.compute(objectsToRender).also { data[key] = it } - } - } - - object Empty : RenderingContext() { - override fun get(key: Key): T { - return key.compute(emptyList()) - } - } - - companion object { - @JvmStatic - fun of(vararg objectsToRender: Any?): RenderingContext { - return Impl(objectsToRender.toList()) - } - - @JvmStatic - fun parameters(d: Diagnostic): List = when (d) { - is SimpleDiagnostic<*> -> listOf() - is DiagnosticWithParameters1<*, *> -> listOf(d.a) - is DiagnosticWithParameters2<*, *, *> -> listOf(d.a, d.b) - is DiagnosticWithParameters3<*, *, *, *> -> listOf(d.a, d.b, d.c) - is DiagnosticWithParameters4<*, *, *, *, *> -> listOf(d.a, d.b, d.c, d.d) - is ParametrizedDiagnostic<*> -> error("Unexpected diagnostic: ${d::class.java}") - else -> listOf() - } - - @JvmStatic - fun fromDiagnostic(d: Diagnostic): RenderingContext = Impl(parameters(d)) - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContextUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContextUtils.kt new file mode 100644 index 00000000000..16cfa1823a4 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/RenderingContextUtils.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.diagnostics.rendering + +import org.jetbrains.kotlin.diagnostics.* + +fun RenderingContext.Companion.parameters(d: Diagnostic): List = when (d) { + is SimpleDiagnostic<*> -> listOf() + is DiagnosticWithParameters1<*, *> -> listOf(d.a) + is DiagnosticWithParameters2<*, *, *> -> listOf(d.a, d.b) + is DiagnosticWithParameters3<*, *, *, *> -> listOf(d.a, d.b, d.c) + is DiagnosticWithParameters4<*, *, *, *, *> -> listOf(d.a, d.b, d.c, d.d) + is ParametrizedDiagnostic<*> -> error("Unexpected diagnostic: ${d::class.java}") + else -> listOf() +} + +fun RenderingContext.Companion.fromDiagnostic(d: Diagnostic): RenderingContext = RenderingContext.Impl(parameters(d))