New J2K: Fix JKClassSymbol's name printing in a case of nested class

This commit is contained in:
Ilya Kirillov
2018-12-03 20:46:39 +03:00
committed by Ilya Kirillov
parent 599aa9435f
commit b21c52aecd
2 changed files with 19 additions and 3 deletions
@@ -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)
@@ -79,6 +79,22 @@ class JKMultiverseKtClassSymbol(override val target: KtClassOrObject) : JKClassS
}
fun JKClassSymbol.displayName() =
when (this) {
is JKUniverseClassSymbol ->
target.psi<PsiClass>()
?.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<JKMethod> {
override val receiverType: JKType?
get() = (target.parent as? JKClass)?.let {