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)