From b21c52aecddb368e7a945a05f6360f27ba2f3b98 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 3 Dec 2018 20:46:39 +0300 Subject: [PATCH] New J2K: Fix JKClassSymbol's name printing in a case of nested class --- .../org/jetbrains/kotlin/j2k/NewCodeBuilder.kt | 6 +++--- .../jetbrains/kotlin/j2k/tree/impl/symbols.kt | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index cc3329ea6dd..a847244b01e 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -554,7 +554,7 @@ class NewCodeBuilder { private fun renderType(type: JKType) { if (type is JKNoTypeImpl) return when (type) { - is JKClassType -> type.classReference.fqName?.let { printer.printWithNoIndent(FqName(it).shortName().asString()) } + is JKClassType -> printer.printWithNoIndent(type.classReference.displayName()) is JKUnresolvedClassType -> printer.printWithNoIndent(type.name) is JKContextType -> return is JKStarProjectionType -> @@ -587,7 +587,7 @@ class NewCodeBuilder { if (javaNewExpression.isAnonymousClass()) { printer.printWithNoIndent("object : ") } - printer.printWithNoIndent(javaNewExpression.classSymbol.name) + printer.printWithNoIndent(javaNewExpression.classSymbol.displayName()) javaNewExpression.typeArgumentList.accept(this) if (javaNewExpression.constructorIsPresent()) { printer.par(ROUND) { @@ -753,7 +753,7 @@ class NewCodeBuilder { override fun visitAnnotation(annotation: JKAnnotation) { printer.printWithNoIndent("@") - printer.printWithNoIndent(annotation.classSymbol.name) + printer.printWithNoIndent(annotation.classSymbol.displayName()) if (annotation.arguments.expressions.isNotEmpty()) { printer.par { annotation.arguments.accept(this) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt index 0a6d184cf68..426f8f3dd75 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/symbols.kt @@ -79,6 +79,22 @@ class JKMultiverseKtClassSymbol(override val target: KtClassOrObject) : JKClassS } +fun JKClassSymbol.displayName() = + when (this) { + is JKUniverseClassSymbol -> + target.psi() + ?.let { it.nameWithOuterClasses() } + ?: name + is JKMultiverseClassSymbol -> target.nameWithOuterClasses() + else -> name + } + +fun PsiClass.nameWithOuterClasses() = + generateSequence(this) { it.containingClass } + .toList() + .reversed() + .joinToString(separator = ".") { it.name!! } + class JKUniverseMethodSymbol(private val symbolProvider: JKSymbolProvider) : JKMethodSymbol, JKUniverseSymbol { override val receiverType: JKType? get() = (target.parent as? JKClass)?.let {