Slice tree: shorter container rendering for properties in primary constructor

This commit is contained in:
Valentin Kipyatkov
2020-04-14 16:08:57 +03:00
parent 23ead3c805
commit 3e5820e4c1
11 changed files with 31 additions and 22 deletions
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.parents
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.resolve.descriptorUtil.isCompanionObject
@@ -54,7 +55,8 @@ object KotlinSliceUsageCellRenderer : SliceUsageCellRendererBase() {
}
fun containerSuffix(sliceUsage: SliceUsage): String? {
val declaration = sliceUsage.element?.parents?.firstOrNull {
val element = sliceUsage.element ?: return null
var declaration = element.parents.firstOrNull {
it is KtClass ||
it is KtObjectDeclaration && !it.isObjectLiteral() ||
it is KtNamedFunction && !it.isLocal ||
@@ -62,6 +64,11 @@ object KotlinSliceUsageCellRenderer : SliceUsageCellRendererBase() {
it is KtConstructor<*>
} as? KtDeclaration ?: return null
// for a val or var among primary constructor parameters show the class as container
if (declaration is KtPrimaryConstructor && element is KtParameter && element.hasValOrVar()) {
declaration = declaration.containingClassOrObject!!
}
return buildString {
append(KotlinBundle.message("slicer.text.in", ""))
append(" ")
@@ -1,7 +1,7 @@
9 class C : B(<bold>1</bold>) { (in C)
15 val <bold>y = b.foo</bold> (in test(A, B, C))
15 val y = <bold>b.foo</bold> (in test(A, B, C))
7 open class B(override val <bold>foo: Int</bold>) : A() (in B(Int))
7 open class B(override val <bold>foo: Int</bold>) : A() (in B)
9 class C : B(<bold>1</bold>) { (in C)
10 override val foo = <bold>3</bold> (in C.foo: Int)
@@ -18,5 +18,5 @@
3 super(<bold>10</bold>);
15 val <bold>y = b.foo</bold> (in test(A, B, C))
15 val y = <bold>b.foo</bold> (in test(A, B, C))
7 open class B(override val <bold>foo: Int</bold>) : A() (in B(Int))
7 open class B(override val <bold>foo: Int</bold>) : A() (in B)
3 super(<bold>10</bold>);
@@ -1,6 +1,6 @@
15 val <bold>y = b.foo</bold> (in test(A, B, C))
15 val y = <bold>b.foo</bold> (in test(A, B, C))
7 open class B(override val <bold>foo: Int</bold>) : A() (in B(Int))
7 open class B(override val <bold>foo: Int</bold>) : A() (in B)
3 super(<bold>10</bold>);
9 class C : B(<bold>1</bold>) { (in C)
7 return <bold>5</bold>;
+4 -4
View File
@@ -1,16 +1,16 @@
2 D(int <bold>n</bold>) {
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A)
3 super(<bold>n</bold>);
2 D(int <bold>n</bold>) {
5 class B : A(<bold>1</bold>) (in B)
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A)
5 class B : A(<bold>1</bold>) (in B)
8 val z = A(<bold>2</bold>).n (in test())
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A)
8 val z = A(<bold>2</bold>).n (in test())
7 A a = new A(<bold>3</bold>);
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A)
7 A a = new A(<bold>3</bold>);
@@ -1,3 +1,4 @@
[NotNull Values]
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A)
3 open class A(val <bold>n: Int</bold>) (in A)
+1 -1
View File
@@ -1,4 +1,4 @@
3 open class A(val <bold>n: Int</bold>) (in A(Int))
3 open class A(val <bold>n: Int</bold>) (in A)
3 super(<bold>n</bold>);
2 D(int <bold>n</bold>) {
5 class B : A(<bold>1</bold>) (in B)
+6 -6
View File
@@ -1,24 +1,24 @@
2 D(int <bold>n</bold>) {
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
3 super(<bold>n</bold>);
2 D(int <bold>n</bold>) {
20 class B : A(<bold>1</bold>) (in B)
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
20 class B : A(<bold>1</bold>) (in B)
23 val z = A(<bold>2</bold>).n (in test())
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
23 val z = A(<bold>2</bold>).n (in test())
24 A(<bold>3</bold>).n = 2 (in test())
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
24 A(<bold>3</bold>).n = 2 (in test())
7 A a = new A(<bold>3</bold>);
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
7 A a = new A(<bold>3</bold>);
9 a.setN(<bold>4</bold>);
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
9 a.setN(<bold>4</bold>);
@@ -1,3 +1,4 @@
[NotNull Values]
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
3 open class A(var <bold>n: Int</bold>) { (in A)
+1 -1
View File
@@ -1,4 +1,4 @@
3 open class A(var <bold>n: Int</bold>) { (in A(Int))
3 open class A(var <bold>n: Int</bold>) { (in A)
3 super(<bold>n</bold>);
2 D(int <bold>n</bold>) {
7 A a = new A(<bold>3</bold>);
+1 -1
View File
@@ -1,4 +1,4 @@
3 class A(val <bold>n: Int</bold>) { (in A(Int))
3 class A(val <bold>n: Int</bold>) { (in A)
3 int n = new A(1).<bold>getN</bold>();
4 val x = <bold>n</bold> (in A.x: Int)
4 val <bold>x = n</bold> (in A)
+1 -1
View File
@@ -1,4 +1,4 @@
3 class A(var <bold>n: Int</bold>) { (in A(Int))
3 class A(var <bold>n: Int</bold>) { (in A)
3 int n = new A(1).<bold>getN</bold>();
4 val x = <bold>n</bold> (in A.x: Int)
4 val <bold>x = n</bold> (in A)