[VISUALIZER] Fix package rendering
This commit is contained in:
committed by
TeamCityServer
parent
c4be67b518
commit
f2cf86a3ae
+11
-16
@@ -278,7 +278,8 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
|
|
||||||
inner class FirRenderer : FirVisitor<Unit, StringBuilder>() {
|
inner class FirRenderer : FirVisitor<Unit, StringBuilder>() {
|
||||||
private val session = firFile.session
|
private val session = firFile.session
|
||||||
private val filePackage = firFile.packageFqName.toString().replace(".", "/")
|
private val filePackage = firFile.packageFqName.toString()
|
||||||
|
private val filePackageWithSlash = filePackage.replace(".", "/")
|
||||||
private val symbolProvider = firFile.session.symbolProvider
|
private val symbolProvider = firFile.session.symbolProvider
|
||||||
|
|
||||||
private fun FirTypeRef.renderWithNativeRenderer(): String {
|
private fun FirTypeRef.renderWithNativeRenderer(): String {
|
||||||
@@ -288,17 +289,13 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
}.replace("R|", "").replace("|", "")
|
}.replace("R|", "").replace("|", "")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun removeCurrentFilePackage(fqName: String): String {
|
private fun String.removeCurrentFilePackage(): String {
|
||||||
val withoutPackage = when {
|
val withoutPackage = this.replaceFirst("$filePackage.", "").replaceFirst("$filePackageWithSlash/", "")
|
||||||
fqName.startsWith(filePackage) && !fqName.substring(filePackage.length + 1).contains("/") ->
|
|
||||||
fqName.replaceFirst("$filePackage/", "")
|
|
||||||
else -> fqName
|
|
||||||
}
|
|
||||||
|
|
||||||
return withoutPackage.let { if (it.startsWith("/")) it.substring(1) else it }
|
return withoutPackage.let { if (it.startsWith("/")) it.substring(1) else it }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ClassId.getWithoutCurrentPackage() = removeCurrentFilePackage(this.asString())
|
private fun ClassId.getWithoutCurrentPackage() = this.asString().removeCurrentFilePackage()
|
||||||
|
|
||||||
private fun <T : FirElement> renderListInTriangles(list: List<T>, data: StringBuilder, withSpace: Boolean = false) {
|
private fun <T : FirElement> renderListInTriangles(list: List<T>, data: StringBuilder, withSpace: Boolean = false) {
|
||||||
if (list.isNotEmpty()) {
|
if (list.isNotEmpty()) {
|
||||||
@@ -495,7 +492,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: StringBuilder) {
|
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: StringBuilder) {
|
||||||
data.append(resolvedTypeRef.renderWithNativeRenderer())
|
data.append((resolvedTypeRef.delegatedTypeRef ?: resolvedTypeRef).renderWithNativeRenderer().removeCurrentFilePackage())
|
||||||
val coneType = resolvedTypeRef.type
|
val coneType = resolvedTypeRef.type
|
||||||
if (coneType is ConeClassLikeType) {
|
if (coneType is ConeClassLikeType) {
|
||||||
val original = coneType.directExpansionType(session)
|
val original = coneType.directExpansionType(session)
|
||||||
@@ -518,8 +515,9 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
val id = when (symbol) {
|
val id = when (symbol) {
|
||||||
is FirCallableSymbol<*> -> {
|
is FirCallableSymbol<*> -> {
|
||||||
val callableId = symbol.callableId
|
val callableId = symbol.callableId
|
||||||
val idWithPackage = callableId.toString().replaceFirst(".${callableId.callableName}", "")
|
callableId.toString()
|
||||||
removeCurrentFilePackage(idWithPackage)
|
.replaceFirst(".${callableId.callableName}", "")
|
||||||
|
.removeCurrentFilePackage()
|
||||||
}
|
}
|
||||||
is FirClassLikeSymbol<*> -> symbol.classId.getWithoutCurrentPackage()
|
is FirClassLikeSymbol<*> -> symbol.classId.getWithoutCurrentPackage()
|
||||||
else -> ""
|
else -> ""
|
||||||
@@ -529,10 +527,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
|||||||
if (variable !is FirValueParameter) {
|
if (variable !is FirValueParameter) {
|
||||||
if (variable.isVar) data.append("var ") else if (variable.isVal) data.append("val ")
|
if (variable.isVar) data.append("var ") else if (variable.isVal) data.append("val ")
|
||||||
}
|
}
|
||||||
data.append(id)
|
data.append(id).append(": ").append(variable.returnTypeRef.render())
|
||||||
|
|
||||||
data.append(": ")
|
|
||||||
variable.returnTypeRef.accept(this, data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
when (symbol) {
|
when (symbol) {
|
||||||
@@ -560,7 +555,7 @@ 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)
|
data.append(symbol.fir.returnTypeRef.render())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -353,11 +353,12 @@ class PsiVisualizer(private val file: KtFile, analysisResult: AnalysisResult) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor, data: StringBuilder) {
|
override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor, data: StringBuilder) {
|
||||||
data.append("package-fragment ${renderFqName(descriptor, removeCurrentPackage = false)}")
|
//data.append("package-fragment ${renderFqName(descriptor, removeCurrentPackage = false)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPackageViewDescriptor(descriptor: PackageViewDescriptor, data: StringBuilder) {
|
override fun visitPackageViewDescriptor(descriptor: PackageViewDescriptor, data: StringBuilder) {
|
||||||
data.append("package ${renderFqName(descriptor, removeCurrentPackage = false)}")
|
// don't render package because support the same logic in fir is very hard
|
||||||
|
//data.append("package ${renderFqName(descriptor, removeCurrentPackage = false)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitVariableDescriptor(variable: VariableDescriptor, data: StringBuilder) {
|
override fun visitVariableDescriptor(variable: VariableDescriptor, data: StringBuilder) {
|
||||||
|
|||||||
@@ -9,9 +9,7 @@ class C<T, out S> {
|
|||||||
|
|
||||||
interface Test {
|
interface Test {
|
||||||
// C<out CharSequence, *>.D<in collections/List<*>, *>
|
// C<out CharSequence, *>.D<in collections/List<*>, *>
|
||||||
// │ package a
|
// │ class C<T, S> collections/List<*>
|
||||||
// │ │ package a/b
|
// │ │ │
|
||||||
// │ │ │ class C<T, S> collections/List<*>
|
|
||||||
// │ │ │ │ │
|
|
||||||
val x: a.b.C<out CharSequence, *>.D<in List<*>, *>
|
val x: a.b.C<out CharSequence, *>.D<in List<*>, *>
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+4
-4
@@ -15,8 +15,8 @@ fun test_1() {
|
|||||||
|
|
||||||
fun test_2() {
|
fun test_2() {
|
||||||
// fun contracts/contract(contracts/ContractBuilder.() -> Unit): Unit
|
// fun contracts/contract(contracts/ContractBuilder.() -> Unit): Unit
|
||||||
// package kotlin │ contract@0
|
// │ contract@0
|
||||||
// │ │ │
|
// │ │
|
||||||
kotlin.contracts.contract {
|
kotlin.contracts.contract {
|
||||||
// this@0
|
// this@0
|
||||||
// fun <R> (contracts/ContractBuilder).callsInPlace<???>(Function<???>, contracts/InvocationKind = ...): contracts/CallsInPlace
|
// fun <R> (contracts/ContractBuilder).callsInPlace<???>(Function<???>, contracts/InvocationKind = ...): contracts/CallsInPlace
|
||||||
@@ -51,8 +51,8 @@ var test_3: Int = 1
|
|||||||
// │
|
// │
|
||||||
set(value) {
|
set(value) {
|
||||||
// fun contracts/contract(contracts/ContractBuilder.() -> Unit): Unit
|
// fun contracts/contract(contracts/ContractBuilder.() -> Unit): Unit
|
||||||
// package kotlin │ contract@0
|
// │ contract@0
|
||||||
// │ │ │
|
// │ │
|
||||||
kotlin.contracts.contract {
|
kotlin.contracts.contract {
|
||||||
// this@0
|
// this@0
|
||||||
// fun <R> (contracts/ContractBuilder).callsInPlace<???>(Function<???>, contracts/InvocationKind = ...): contracts/CallsInPlace
|
// fun <R> (contracts/ContractBuilder).callsInPlace<???>(Function<???>, contracts/InvocationKind = ...): contracts/CallsInPlace
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
// FIR_IGNORE
|
|
||||||
// package kotlin
|
|
||||||
// │
|
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
// package kotlin
|
|
||||||
// │
|
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
// fun <T> lazy<Int>(() -> Int): Lazy<Int>
|
// fun <T> lazy<Int>(() -> Int): Lazy<Int>
|
||||||
|
|||||||
+2
-3
@@ -18,9 +18,8 @@ abstract class My<T : Some> {
|
|||||||
abstract val y: My.T
|
abstract val y: My.T
|
||||||
|
|
||||||
// [ERROR : T]
|
// [ERROR : T]
|
||||||
// │ package test
|
// │ class My<T : Some>
|
||||||
// │ │ class My<T : Some>
|
// │ │
|
||||||
// │ │ │
|
|
||||||
abstract val z: test.My.T
|
abstract val z: test.My.T
|
||||||
|
|
||||||
// [ERROR : T]
|
// [ERROR : T]
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ fun test() {
|
|||||||
// class A
|
// class A
|
||||||
// │
|
// │
|
||||||
A::class
|
A::class
|
||||||
// package test
|
|
||||||
// │
|
|
||||||
test.A::class
|
test.A::class
|
||||||
// constructor A()
|
// constructor A()
|
||||||
// │
|
// │
|
||||||
@@ -18,8 +16,8 @@ fun test() {
|
|||||||
// class A val <T> reflect/KClass<A>.java: java/lang/Class<A>
|
// class A val <T> reflect/KClass<A>.java: java/lang/Class<A>
|
||||||
// │ │
|
// │ │
|
||||||
A::class.java
|
A::class.java
|
||||||
// package test val <T> reflect/KClass<A>.java: java/lang/Class<A>
|
// val <T> reflect/KClass<A>.java: java/lang/Class<A>
|
||||||
// │ │
|
// │
|
||||||
test.A::class.java
|
test.A::class.java
|
||||||
// constructor A()
|
// constructor A()
|
||||||
// │ val <T> reflect/KClass<out A>.java: java/lang/Class<out A>
|
// │ val <T> reflect/KClass<out A>.java: java/lang/Class<out A>
|
||||||
|
|||||||
@@ -9,14 +9,10 @@ package org.jetbrains.kotlin.test
|
|||||||
// │ │ │ │ │
|
// │ │ │ │ │
|
||||||
val listOfInt = listOf(1, 2, 3)
|
val listOfInt = listOf(1, 2, 3)
|
||||||
// java/util/ArrayList<Int>
|
// java/util/ArrayList<Int>
|
||||||
// │ package java
|
// │ constructor java/util/ArrayList<E : Any!>()
|
||||||
// │ │ constructor java/util/ArrayList<E : Any!>()
|
// │ │
|
||||||
// │ │ │
|
|
||||||
val javaList = java.util.ArrayList<Int>()
|
val javaList = java.util.ArrayList<Int>()
|
||||||
|
|
||||||
// package java
|
|
||||||
// │ package java/util
|
|
||||||
// │ │
|
|
||||||
fun move(): java.util.ArrayList<Int> {
|
fun move(): java.util.ArrayList<Int> {
|
||||||
// Int val listOfInt: collections/List<Int>
|
// Int val listOfInt: collections/List<Int>
|
||||||
// │ │
|
// │ │
|
||||||
|
|||||||
Reference in New Issue
Block a user