diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsageCellRenderer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsageCellRenderer.kt index 57a184f7034..1a5425acaea 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsageCellRenderer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsageCellRenderer.kt @@ -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(" ") diff --git a/idea/testData/slicer/inflow/overridingParameter.leafGroups.txt b/idea/testData/slicer/inflow/overridingParameter.leafGroups.txt index d6b16529781..a07802ff63a 100644 --- a/idea/testData/slicer/inflow/overridingParameter.leafGroups.txt +++ b/idea/testData/slicer/inflow/overridingParameter.leafGroups.txt @@ -1,7 +1,7 @@ 9 class C : B(1) { (in C) 15 val y = b.foo (in test(A, B, C)) 15 val y = b.foo (in test(A, B, C)) -7 open class B(override val foo: Int) : A() (in B(Int)) +7 open class B(override val foo: Int) : A() (in B) 9 class C : B(1) { (in C) 10 override val foo = 3 (in C.foo: Int) @@ -18,5 +18,5 @@ 3 super(10); 15 val y = b.foo (in test(A, B, C)) 15 val y = b.foo (in test(A, B, C)) -7 open class B(override val foo: Int) : A() (in B(Int)) +7 open class B(override val foo: Int) : A() (in B) 3 super(10); diff --git a/idea/testData/slicer/inflow/overridingParameter.results.txt b/idea/testData/slicer/inflow/overridingParameter.results.txt index 9208582603b..c9c5af56e7f 100644 --- a/idea/testData/slicer/inflow/overridingParameter.results.txt +++ b/idea/testData/slicer/inflow/overridingParameter.results.txt @@ -1,6 +1,6 @@ 15 val y = b.foo (in test(A, B, C)) 15 val y = b.foo (in test(A, B, C)) -7 open class B(override val foo: Int) : A() (in B(Int)) +7 open class B(override val foo: Int) : A() (in B) 3 super(10); 9 class C : B(1) { (in C) 7 return 5; diff --git a/idea/testData/slicer/inflow/valParameter.leafGroups.txt b/idea/testData/slicer/inflow/valParameter.leafGroups.txt index c95dfbd6a02..4948b3b542a 100644 --- a/idea/testData/slicer/inflow/valParameter.leafGroups.txt +++ b/idea/testData/slicer/inflow/valParameter.leafGroups.txt @@ -1,16 +1,16 @@ 2 D(int n) { -3 open class A(val n: Int) (in A(Int)) +3 open class A(val n: Int) (in A) 3 super(n); 2 D(int n) { 5 class B : A(1) (in B) -3 open class A(val n: Int) (in A(Int)) +3 open class A(val n: Int) (in A) 5 class B : A(1) (in B) 8 val z = A(2).n (in test()) -3 open class A(val n: Int) (in A(Int)) +3 open class A(val n: Int) (in A) 8 val z = A(2).n (in test()) 7 A a = new A(3); -3 open class A(val n: Int) (in A(Int)) +3 open class A(val n: Int) (in A) 7 A a = new A(3); diff --git a/idea/testData/slicer/inflow/valParameter.nullnessGroups.txt b/idea/testData/slicer/inflow/valParameter.nullnessGroups.txt index bda1aca9933..cccbd1d7f96 100644 --- a/idea/testData/slicer/inflow/valParameter.nullnessGroups.txt +++ b/idea/testData/slicer/inflow/valParameter.nullnessGroups.txt @@ -1,3 +1,4 @@ [NotNull Values] -3 open class A(val n: Int) (in A(Int)) -3 open class A(val n: Int) (in A(Int)) +3 open class A(val n: Int) (in A) +3 open class A(val n: Int) (in A) + diff --git a/idea/testData/slicer/inflow/valParameter.results.txt b/idea/testData/slicer/inflow/valParameter.results.txt index 5caa00b926e..53652d88895 100644 --- a/idea/testData/slicer/inflow/valParameter.results.txt +++ b/idea/testData/slicer/inflow/valParameter.results.txt @@ -1,4 +1,4 @@ -3 open class A(val n: Int) (in A(Int)) +3 open class A(val n: Int) (in A) 3 super(n); 2 D(int n) { 5 class B : A(1) (in B) diff --git a/idea/testData/slicer/inflow/varParameter.leafGroups.txt b/idea/testData/slicer/inflow/varParameter.leafGroups.txt index 8362548d7d9..84aa5c48564 100644 --- a/idea/testData/slicer/inflow/varParameter.leafGroups.txt +++ b/idea/testData/slicer/inflow/varParameter.leafGroups.txt @@ -1,24 +1,24 @@ 2 D(int n) { -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 3 super(n); 2 D(int n) { 20 class B : A(1) (in B) -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 20 class B : A(1) (in B) 23 val z = A(2).n (in test()) -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 23 val z = A(2).n (in test()) 24 A(3).n = 2 (in test()) -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 24 A(3).n = 2 (in test()) 7 A a = new A(3); -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 7 A a = new A(3); 9 a.setN(4); -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 9 a.setN(4); diff --git a/idea/testData/slicer/inflow/varParameter.nullnessGroups.txt b/idea/testData/slicer/inflow/varParameter.nullnessGroups.txt index d3a0b507ec1..3adf3e33455 100644 --- a/idea/testData/slicer/inflow/varParameter.nullnessGroups.txt +++ b/idea/testData/slicer/inflow/varParameter.nullnessGroups.txt @@ -1,3 +1,4 @@ [NotNull Values] -3 open class A(var n: Int) { (in A(Int)) -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) +3 open class A(var n: Int) { (in A) + diff --git a/idea/testData/slicer/inflow/varParameter.results.txt b/idea/testData/slicer/inflow/varParameter.results.txt index 4777da88fdb..b1a459c0645 100644 --- a/idea/testData/slicer/inflow/varParameter.results.txt +++ b/idea/testData/slicer/inflow/varParameter.results.txt @@ -1,4 +1,4 @@ -3 open class A(var n: Int) { (in A(Int)) +3 open class A(var n: Int) { (in A) 3 super(n); 2 D(int n) { 7 A a = new A(3); diff --git a/idea/testData/slicer/outflow/valParameter.results.txt b/idea/testData/slicer/outflow/valParameter.results.txt index 6dc13a2dc2a..61c3950bb77 100644 --- a/idea/testData/slicer/outflow/valParameter.results.txt +++ b/idea/testData/slicer/outflow/valParameter.results.txt @@ -1,4 +1,4 @@ -3 class A(val n: Int) { (in A(Int)) +3 class A(val n: Int) { (in A) 3 int n = new A(1).getN(); 4 val x = n (in A.x: Int) 4 val x = n (in A) diff --git a/idea/testData/slicer/outflow/varParameter.results.txt b/idea/testData/slicer/outflow/varParameter.results.txt index 632c6ca5e18..d49686e2e5f 100644 --- a/idea/testData/slicer/outflow/varParameter.results.txt +++ b/idea/testData/slicer/outflow/varParameter.results.txt @@ -1,4 +1,4 @@ -3 class A(var n: Int) { (in A(Int)) +3 class A(var n: Int) { (in A) 3 int n = new A(1).getN(); 4 val x = n (in A.x: Int) 4 val x = n (in A)