From fd8205e31774986d4b7c22fc562a3fcd2bdb3864 Mon Sep 17 00:00:00 2001 From: Ivan Cilcic Date: Thu, 15 Aug 2019 00:42:15 +0300 Subject: [PATCH] Add removing current file package name from fq name --- .../kotlin/compiler/visualizer/PsiRenderer.kt | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) 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/PsiRenderer.kt index f835d1afad1..d06a3d224ed 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/PsiRenderer.kt @@ -36,6 +36,7 @@ import java.util.ArrayList class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : BaseRenderer { val bindingContext = analysisResult.bindingContext private val annotations = mutableListOf() + private val filePackage = file.packageFqName.toString().replace(".", "/") val descriptorRenderer = PsiDescriptorRenderer() @@ -217,10 +218,12 @@ class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : Ba private val typeRenderer: DescriptorRenderer = DescriptorRenderer.withOptions { withDefinedIn = false modifiers = emptySet() - classifierNamePolicy = /*ClassifierNamePolicy.SOURCE_CODE_QUALIFIED*/object : ClassifierNamePolicy { + classifierNamePolicy = object : ClassifierNamePolicy { override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { - return (if (classifier is TypeParameterDescriptor) renderer.renderName(classifier.name, false) + val fqName = (if (classifier is TypeParameterDescriptor) renderer.renderName(classifier.name, false) else renderer.renderFqName(DescriptorUtils.getFqName(classifier))).replace(".", "/") + + return removeCurrentFilePackage(fqName) } } includeAdditionalModifiers = false @@ -254,8 +257,8 @@ class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : Ba } } - private fun renderFqName(descriptor: DeclarationDescriptor): String { - return generateSequence(descriptor) { it.containingDeclaration } + private fun renderFqName(descriptor: DeclarationDescriptor, removeCurrentPackage: Boolean = true): String { + val fqName = generateSequence(descriptor) { it.containingDeclaration } .fold("") { acc, desc -> val name = when (desc) { is LazyPackageDescriptor -> desc.fqName.toString().replace(".", "/") @@ -266,10 +269,20 @@ class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : Ba else -> if (desc is PackageFragmentDescriptor || desc is PackageViewDescriptor) "/" else "." } if (name == FqName.ROOT.toString() || desc is ModuleDescriptor) { - return acc + return@fold acc } return@fold "$name$separator$acc" } + + return if (removeCurrentPackage) removeCurrentFilePackage(fqName) else fqName + } + + private fun removeCurrentFilePackage(fqName: String): String { + return if (fqName.startsWith(filePackage) && !fqName.substring(filePackage.length + 1).contains("/")) { + fqName.replaceFirst("$filePackage/", "") + } else { + fqName + } } private fun renderReceiver(descriptor: CallableDescriptor, data: StringBuilder): ReceiverParameterDescriptor? { @@ -331,11 +344,11 @@ class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : Ba } override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor, data: StringBuilder) { - data.append("package-fragment ${renderFqName(descriptor)}") + data.append("package-fragment ${renderFqName(descriptor, removeCurrentPackage = false)}") } override fun visitPackageViewDescriptor(descriptor: PackageViewDescriptor, data: StringBuilder) { - data.append("package ${renderFqName(descriptor)}") + data.append("package ${renderFqName(descriptor, removeCurrentPackage = false)}") } override fun visitVariableDescriptor(variable: VariableDescriptor, data: StringBuilder) {