[VISUALIZER] Fix class literals rendering
This commit is contained in:
committed by
TeamCityServer
parent
fb654ce09b
commit
c94a4e7baf
+9
@@ -293,6 +293,10 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
jetWhenEntry.firstOfTypeWithRender<FirWhenBranch>(jetWhenEntry.expression) { this.result.typeRef }
|
||||
super.visitWhenEntry(jetWhenEntry)
|
||||
}
|
||||
|
||||
override fun visitClassLiteralExpression(expression: KtClassLiteralExpression) {
|
||||
expression.firstOfTypeWithRender<FirGetClassCall>()
|
||||
}
|
||||
}
|
||||
|
||||
inner class FirRenderer : FirVisitor<Unit, StringBuilder>() {
|
||||
@@ -623,6 +627,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
if (fir is FirClass) {
|
||||
data.append(fir.classKind.name.toLowerCaseAsciiOnly().replace("_", " ")).append(" ")
|
||||
data.append(fir.symbol.classId.asString().removeCurrentFilePackage())
|
||||
renderListInTriangles(fir.typeParameters, data)
|
||||
if (fir.superTypeRefs.any { it.render() != "kotlin/Any" }) {
|
||||
data.append(": ")
|
||||
fir.superTypeRefs.joinTo(data, separator = ", ") { typeRef -> typeRef.render() }
|
||||
@@ -664,6 +669,10 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitGetClassCall(getClassCall: FirGetClassCall, data: StringBuilder) {
|
||||
getClassCall.argument.accept(this, data)
|
||||
}
|
||||
|
||||
private fun AbstractFirBasedSymbol<*>.isLocalDeclaration(): Boolean {
|
||||
return when (val fir = this.fir) {
|
||||
is FirConstructor -> {
|
||||
|
||||
+8
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.declaresOrInheritsDefaultValu
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.expressions.DoubleColonLHS
|
||||
import java.util.*
|
||||
|
||||
class PsiVisualizer(private val file: KtFile, analysisResult: AnalysisResult) : BaseRenderer() {
|
||||
@@ -225,6 +226,13 @@ class PsiVisualizer(private val file: KtFile, analysisResult: AnalysisResult) :
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitClassLiteralExpression(expression: KtClassLiteralExpression) {
|
||||
val doubleColonLhs = bindingContext[DOUBLE_COLON_LHS, expression.receiverExpression]
|
||||
doubleColonLhs?.takeIf { it is DoubleColonLHS.Type }?.let {
|
||||
addAnnotation(descriptorRenderer.render(it.type.constructor.declarationDescriptor!!), expression)
|
||||
} ?: super.visitClassLiteralExpression(expression)
|
||||
}
|
||||
}
|
||||
|
||||
inner class PsiDescriptorRenderer(
|
||||
|
||||
@@ -8,6 +8,8 @@ fun test() {
|
||||
// class A
|
||||
// │
|
||||
A::class
|
||||
// class A
|
||||
// │
|
||||
test.A::class
|
||||
// constructor A()
|
||||
// │
|
||||
@@ -16,8 +18,8 @@ fun test() {
|
||||
// class A val <T> reflect/KClass<T>.java: java/lang/Class<T>
|
||||
// │ │
|
||||
A::class.java
|
||||
// val <T> reflect/KClass<T>.java: java/lang/Class<T>
|
||||
// │
|
||||
// class A val <T> reflect/KClass<T>.java: java/lang/Class<T>
|
||||
// │ │
|
||||
test.A::class.java
|
||||
// constructor A()
|
||||
// │ val <T> reflect/KClass<T>.java: java/lang/Class<T>
|
||||
|
||||
Reference in New Issue
Block a user