[VISUALIZER] Fix typealias rendering in fir
This commit is contained in:
committed by
TeamCityServer
parent
c94a4e7baf
commit
84d4a0609f
+16
-5
@@ -446,10 +446,23 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
data.append(errorNamedReference.name)
|
data.append(errorNamedReference.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun visitConstructor(calleeReference: FirReference, data: StringBuilder) {
|
private fun visitConstructor(call: FirResolvable, data: StringBuilder) {
|
||||||
|
val calleeReference = call.calleeReference
|
||||||
if (calleeReference !is FirResolvedNamedReference) {
|
if (calleeReference !is FirResolvedNamedReference) {
|
||||||
data.append("[ERROR: Unresolved]")
|
data.append("[ERROR: Unresolved]")
|
||||||
} else {
|
} else {
|
||||||
|
when (call) {
|
||||||
|
is FirDelegatedConstructorCall -> {
|
||||||
|
val actualReturnType = calleeReference.resolvedSymbol.firUnsafe<FirConstructor>().returnTypeRef
|
||||||
|
if (call.constructedTypeRef.coneType != actualReturnType.coneType) {
|
||||||
|
// is typealias
|
||||||
|
val typealiasType = call.constructedTypeRef.renderWithNativeRenderer()
|
||||||
|
data.append("fun ").append(typealiasType).append(".<init>(): ").append(typealiasType)
|
||||||
|
.append(" /* = ").append(actualReturnType.renderWithNativeRenderer()).append(" */")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
visitConstructor(calleeReference.resolvedSymbol.fir as FirConstructor, data)
|
visitConstructor(calleeReference.resolvedSymbol.fir as FirConstructor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -549,15 +562,13 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: StringBuilder) {
|
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: StringBuilder) {
|
||||||
val reference = annotationCall.calleeReference
|
visitConstructor(annotationCall, data)
|
||||||
visitConstructor(reference, data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: StringBuilder) {
|
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: StringBuilder) {
|
||||||
val coneClassType = delegatedConstructorCall.constructedTypeRef.coneTypeSafe<ConeClassLikeType>()
|
val coneClassType = delegatedConstructorCall.constructedTypeRef.coneTypeSafe<ConeClassLikeType>()
|
||||||
if (coneClassType != null) {
|
if (coneClassType != null) {
|
||||||
val reference = delegatedConstructorCall.calleeReference
|
visitConstructor(delegatedConstructorCall, data)
|
||||||
visitConstructor(reference, data)
|
|
||||||
} else {
|
} else {
|
||||||
data.append("[ERROR : ${delegatedConstructorCall.constructedTypeRef.render()}]")
|
data.append("[ERROR : ${delegatedConstructorCall.constructedTypeRef.render()}]")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user