diff --git a/compiler/visualizer/common/src/org/jetbrains/kotlin/compiler/visualizer/BaseRenderer.kt b/compiler/visualizer/common/src/org/jetbrains/kotlin/compiler/visualizer/BaseRenderer.kt index a69531417de..c9768ace466 100644 --- a/compiler/visualizer/common/src/org/jetbrains/kotlin/compiler/visualizer/BaseRenderer.kt +++ b/compiler/visualizer/common/src/org/jetbrains/kotlin/compiler/visualizer/BaseRenderer.kt @@ -5,6 +5,30 @@ package org.jetbrains.kotlin.compiler.visualizer -interface BaseRenderer { - fun render(): String +import com.intellij.psi.PsiElement + +abstract class BaseRenderer { + private val annotations = mutableSetOf() + private val unnecessaryData = mapOf( + "kotlin/" to "" + ) + + open fun addAnnotation(annotationText: String, element: PsiElement?, deleteDuplicate: Boolean = true) { + if (element == null) return + annotations.removeIf { it.range.startOffset == element.textRange.startOffset && deleteDuplicate } + + var textWithOutUnnecessaryData = annotationText + for ((key, value) in unnecessaryData) { + textWithOutUnnecessaryData = textWithOutUnnecessaryData.replace(key, value) + } + if (textWithOutUnnecessaryData != element.text && textWithOutUnnecessaryData.isNotEmpty()) { + annotations.add(Annotator.AnnotationInfo(textWithOutUnnecessaryData, element.textRange)) + } + } + + protected fun getAnnotations(): Set { + return annotations + } + + abstract fun render(): String } \ No newline at end of file diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index 7e407c0ce9d..995c79fafc2 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -22,30 +22,15 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getChildOfType import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType -class FirVisualizer(private val firFile: FirFile) : BaseRenderer { - private val annotations = mutableSetOf() - - private val unnecessaryData = mapOf( - "kotlin/" to "" - ) - - private fun addAnnotation(annotationText: String, element: PsiElement?, deleteDuplicate: Boolean = false) { - if (element == null) return - annotations.removeIf { it.range.startOffset == element.textRange.startOffset && deleteDuplicate } - - var textWithOutUnnecessaryData = annotationText - for ((key, value) in unnecessaryData) { - textWithOutUnnecessaryData = textWithOutUnnecessaryData.replace(key, value) - } - if (textWithOutUnnecessaryData != element.text && textWithOutUnnecessaryData.isNotEmpty()) { - annotations.add(Annotator.AnnotationInfo(textWithOutUnnecessaryData, element.textRange)) - } +class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { + override fun addAnnotation(annotationText: String, element: PsiElement?, deleteDuplicate: Boolean) { + super.addAnnotation(annotationText, element, false) } override fun render(): String { val map = mutableMapOf>().apply { Psi2FirMapper(this).visitFile(firFile) } map.keys.firstOrNull { it is KtFile }?.accept(PsiVisitor(map)) - return Annotator.annotate(firFile.psi!!.text, annotations).joinToString("\n") + return Annotator.annotate(firFile.psi!!.text, getAnnotations()).joinToString("\n") } inner class PsiVisitor(private val map: Map>) : KtVisitorVoid() { diff --git a/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiRenderer.kt b/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt similarity index 95% rename from compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiRenderer.kt rename to compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt index 98419b36602..efa06383394 100644 --- a/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiRenderer.kt +++ b/compiler/visualizer/render-psi/src/org/jetbrains/kotlin/compiler/visualizer/PsiVisualizer.kt @@ -35,33 +35,16 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue import org.jetbrains.kotlin.types.* import java.util.ArrayList -class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : BaseRenderer { +class PsiVisualizer(private val file: KtFile, analysisResult: AnalysisResult) : BaseRenderer() { private val bindingContext = analysisResult.bindingContext - private val annotations = mutableSetOf() private val filePackage = file.packageFqName.toString().replace(".", "/") private val argumentsLabel = "" val descriptorRenderer = PsiDescriptorRenderer() - private val unnecessaryData = mapOf( - "kotlin/" to "" - ) - - private fun addAnnotation(annotationText: String, element: PsiElement, deleteDuplicate: Boolean = true) { - annotations.removeIf { it.range.startOffset == element.textRange.startOffset && deleteDuplicate } - - var textWithOutUnnecessaryData = annotationText - for ((key, value) in unnecessaryData) { - textWithOutUnnecessaryData = textWithOutUnnecessaryData.replace(key, value) - } - if (textWithOutUnnecessaryData != element.text && textWithOutUnnecessaryData.isNotEmpty()) { - annotations.add(Annotator.AnnotationInfo(textWithOutUnnecessaryData, element.textRange)) - } - } - override fun render(): String { file.accept(Renderer()) - return annotate(file.text, annotations).joinToString("\n") + return annotate(file.text, getAnnotations()).joinToString("\n") } inner class Renderer : KtVisitorVoid() { diff --git a/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/AbstractPsiVisualizer.kt b/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/AbstractPsiVisualizer.kt index 828695a911d..7b209fb5b9e 100644 --- a/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/AbstractPsiVisualizer.kt +++ b/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/AbstractPsiVisualizer.kt @@ -5,13 +5,10 @@ package org.jetbrains.kotlin.visualizer.psi -import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.compiler.visualizer.PsiRenderer +import org.jetbrains.kotlin.compiler.visualizer.PsiVisualizer import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil -import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.KotlinTestUtils -import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.visualizer.AbstractVisualizer import java.io.File @@ -20,7 +17,7 @@ abstract class AbstractPsiVisualizer : AbstractVisualizer() { val ktFiles = environment.getSourceFiles() val analysisResult = JvmResolveUtil.analyze(ktFiles, environment) - val renderer = PsiRenderer(ktFiles.first(), analysisResult) + val renderer = PsiVisualizer(ktFiles.first(), analysisResult) val psiRenderResult = renderer.render() val expectedPath = file.absolutePath.replace(replacement.first, replacement.second)