Skip to content

Commit 153bc79

Browse files
committed
Join declaration & assignment: do not suggest for non-first line of init / constructor #KT-15545 Fixed
1 parent ea6e3c8 commit 153bc79

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

idea/src/org/jetbrains/kotlin/idea/intentions/JoinDeclarationAndAssignmentIntention.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,11 @@ class JoinDeclarationAndAssignmentIntention : SelfTargetingOffsetIndependentInte
134134

135135
val first = assignments.firstOrNull() ?: return null
136136
if (assignments.any { it !== first && it.parent.parent is KtSecondaryConstructor}) return null
137-
return first
137+
138+
if (propertyContainer !is KtClassBody) return first
139+
140+
val blockParent = first.parent as? KtBlockExpression ?: return null
141+
return if (blockParent.statements.firstOrNull() == first) first else null
138142
}
139143

140144
// a block that only contains comments is not empty
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// IS_APPLICABLE: false
2+
3+
class A
4+
5+
class AFabric {
6+
lateinit var instance: A
7+
fun init(config: Unit) {
8+
instance = A()
9+
}
10+
}
11+
12+
class V(fabric: AFabric) {
13+
val a: A<caret>
14+
init {
15+
val config = getConfig()
16+
fabric.init(config)
17+
a = fabric.instance
18+
}
19+
fun getConfig() = Unit
20+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// IS_APPLICABLE: false
2+
3+
class A
4+
5+
class AFabric {
6+
lateinit var instance: A
7+
fun init(config: Unit) {
8+
instance = A()
9+
}
10+
}
11+
12+
val fabric = AFabric()
13+
14+
class V {
15+
val a: A<caret>
16+
17+
constructor() {
18+
val config = getConfig()
19+
fabric.init(config)
20+
a = fabric.instance
21+
}
22+
23+
fun getConfig() = Unit
24+
}

idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8922,6 +8922,18 @@ public void testMultipleConstructorsWithThis() throws Exception {
89228922
doTest(fileName);
89238923
}
89248924

8925+
@TestMetadata("notFirstInitLine.kt")
8926+
public void testNotFirstInitLine() throws Exception {
8927+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/joinDeclarationAndAssignment/notFirstInitLine.kt");
8928+
doTest(fileName);
8929+
}
8930+
8931+
@TestMetadata("notFirstSecondaryConstructorLine.kt")
8932+
public void testNotFirstSecondaryConstructorLine() throws Exception {
8933+
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/joinDeclarationAndAssignment/notFirstSecondaryConstructorLine.kt");
8934+
doTest(fileName);
8935+
}
8936+
89258937
@TestMetadata("propertyReassignment.kt")
89268938
public void testPropertyReassignment() throws Exception {
89278939
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/joinDeclarationAndAssignment/propertyReassignment.kt");

0 commit comments

Comments
 (0)