Add removing current file package name from fq name

This commit is contained in:
Ivan Cilcic
2019-08-15 00:42:15 +03:00
committed by Mikhail Glukhikh
parent d2e47aea01
commit fd8205e317
@@ -36,6 +36,7 @@ import java.util.ArrayList
class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : BaseRenderer { class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : BaseRenderer {
val bindingContext = analysisResult.bindingContext val bindingContext = analysisResult.bindingContext
private val annotations = mutableListOf<Annotator.AnnotationInfo>() private val annotations = mutableListOf<Annotator.AnnotationInfo>()
private val filePackage = file.packageFqName.toString().replace(".", "/")
val descriptorRenderer = PsiDescriptorRenderer() val descriptorRenderer = PsiDescriptorRenderer()
@@ -217,10 +218,12 @@ class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : Ba
private val typeRenderer: DescriptorRenderer = DescriptorRenderer.withOptions { private val typeRenderer: DescriptorRenderer = DescriptorRenderer.withOptions {
withDefinedIn = false withDefinedIn = false
modifiers = emptySet() modifiers = emptySet()
classifierNamePolicy = /*ClassifierNamePolicy.SOURCE_CODE_QUALIFIED*/object : ClassifierNamePolicy { classifierNamePolicy = object : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String { 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(".", "/") else renderer.renderFqName(DescriptorUtils.getFqName(classifier))).replace(".", "/")
return removeCurrentFilePackage(fqName)
} }
} }
includeAdditionalModifiers = false includeAdditionalModifiers = false
@@ -254,8 +257,8 @@ class PsiRenderer(private val file: KtFile, analysisResult: AnalysisResult) : Ba
} }
} }
private fun renderFqName(descriptor: DeclarationDescriptor): String { private fun renderFqName(descriptor: DeclarationDescriptor, removeCurrentPackage: Boolean = true): String {
return generateSequence(descriptor) { it.containingDeclaration } val fqName = generateSequence(descriptor) { it.containingDeclaration }
.fold("") { acc, desc -> .fold("") { acc, desc ->
val name = when (desc) { val name = when (desc) {
is LazyPackageDescriptor -> desc.fqName.toString().replace(".", "/") 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 "." else -> if (desc is PackageFragmentDescriptor || desc is PackageViewDescriptor) "/" else "."
} }
if (name == FqName.ROOT.toString() || desc is ModuleDescriptor) { if (name == FqName.ROOT.toString() || desc is ModuleDescriptor) {
return acc return@fold acc
} }
return@fold "$name$separator$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? { 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) { 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) { 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) { override fun visitVariableDescriptor(variable: VariableDescriptor, data: StringBuilder) {