[VISUALIZER] Add annotation at Array.set method

This commit is contained in:
Ivan Kylchik
2021-02-09 13:41:27 +03:00
committed by TeamCityServer
parent ca1b20c7f4
commit 945cc36ce3
3 changed files with 33 additions and 21 deletions
@@ -151,7 +151,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
override fun visitNamedFunction(function: KtNamedFunction) {
stack.push((function.name ?: "<no name provided>"))
if (function.equalsToken != null) {
function.bodyExpression!!.firstOfTypeWithRender<FirExpression>(function.equalsToken) { this.typeRef }
function.bodyExpression!!.firstOfTypeWithRender<FirReturnExpression>(function.equalsToken) { this.result.typeRef }
?: function.firstOfTypeWithRender<FirTypedDeclaration>(function.equalsToken) { this.returnTypeRef }
}
super.visitNamedFunction(function)
@@ -280,6 +280,13 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
private val filePackage = firFile.packageFqName.toString().replace(".", "/")
private val symbolProvider = firFile.session.symbolProvider
private fun FirTypeRef.renderWithNativeRenderer(): String {
return buildString {
val nativeRenderer = org.jetbrains.kotlin.fir.FirRenderer(this)
this@renderWithNativeRenderer.accept(nativeRenderer)
}.replace("R|", "").replace("|", "")
}
private fun removeCurrentFilePackage(fqName: String): String {
return if (fqName.startsWith(filePackage) && !fqName.substring(filePackage.length + 1).contains("/")) {
fqName.replaceFirst("$filePackage/", "")
@@ -479,8 +486,8 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
}
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: StringBuilder) {
data.append(resolvedTypeRef.renderWithNativeRenderer())
val coneType = resolvedTypeRef.type
data.append(removeCurrentFilePackage(coneType.render()))
if (coneType is ConeClassLikeType) {
val original = coneType.directExpansionType(session)
original?.let { data.append(" /* = ${it.render()} */") }
@@ -528,11 +535,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
val callableName = symbol.callableId.callableName
val receiverType = symbol.fir.receiverTypeRef
if (receiverType == null) {
if (symbol.callableId.className == null) {
data.append(id)
} else {
data.append("($id).$callableName")
}
symbol.callableId.className?.let { data.append("($id).$callableName") } ?: data.append(id)
} else {
data.append("${receiverType.render()}.$callableName")
}
@@ -557,7 +560,8 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
}
is FirVariableSymbol<*> -> {
renderVariable(symbol.fir) }
renderVariable(symbol.fir)
}
is FirConstructorSymbol -> {
data.append("constructor ")
val packageName = symbol.callableId.className