[FIR] Fix rendering of local variables in Visualizer

This commit is contained in:
Dmitriy Novozhilov
2019-11-06 18:01:51 +03:00
parent f0ba9c3c40
commit abf41f87a1
@@ -334,6 +334,10 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
} }
override fun visitProperty(property: FirProperty, data: StringBuilder) { override fun visitProperty(property: FirProperty, data: StringBuilder) {
if (property.isLocal) {
visitVariable(property, data)
return
}
data.append(property.returnTypeRef.render()) data.append(property.returnTypeRef.render())
} }
@@ -505,6 +509,16 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
id = id.substring(1) id = id.substring(1)
} }
fun renderVariable(variable: FirVariable<*>) {
if (variable !is FirValueParameter) {
if (variable.isVar) data.append("var ") else if (variable.isVal) data.append("val ")
}
data.append(id)
data.append(": ")
variable.returnTypeRef.accept(this, data)
}
when (symbol) { when (symbol) {
is FirNamedFunctionSymbol -> { is FirNamedFunctionSymbol -> {
val callableName = symbol.callableId.callableName val callableName = symbol.callableId.callableName
@@ -520,6 +534,9 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
} }
} }
is FirPropertySymbol -> { is FirPropertySymbol -> {
if (symbol.fir.isLocal) {
renderVariable(symbol.fir)
} else {
data.append(if (symbol.fir.isVar) "var" else "val").append(" ") data.append(if (symbol.fir.isVar) "var" else "val").append(" ")
renderListInTriangles(symbol.fir.typeParameters, data, withSpace = true) renderListInTriangles(symbol.fir.typeParameters, data, withSpace = true)
@@ -533,15 +550,10 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
data.append(symbol.callableId.callableName).append(": ") data.append(symbol.callableId.callableName).append(": ")
symbol.fir.returnTypeRef.accept(this, data) symbol.fir.returnTypeRef.accept(this, data)
} }
is FirVariableSymbol<*> -> {
if (symbol.fir !is FirValueParameter) {
if (symbol.fir.isVar) data.append("var ") else if (symbol.fir.isVal) data.append("val ")
}
data.append(id)
data.append(": ")
symbol.fir.returnTypeRef.accept(this, data)
} }
is FirVariableSymbol<*> -> {
renderVariable(symbol.fir) }
is FirConstructorSymbol -> { is FirConstructorSymbol -> {
data.append("constructor ") data.append("constructor ")
val packageName = symbol.callableId.className val packageName = symbol.callableId.className