[VISUALIZER] Fix typealias rendering in fir

This commit is contained in:
Ivan Kylchik
2021-02-20 00:26:58 +03:00
committed by TeamCityServer
parent c94a4e7baf
commit 84d4a0609f
@@ -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()}]")
} }