From e341ec969f91dc50fec0b935696cbb7907744fc0 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 5 Dec 2017 11:19:58 +0900 Subject: [PATCH] "Join declaration and assignment" should remove 'lateinit' for 'var' #KT-21603 Fixed --- .../intentions/JoinDeclarationAndAssignmentIntention.kt | 2 ++ .../intentions/joinDeclarationAndAssignment/hasLateinit.kt | 5 +++++ .../joinDeclarationAndAssignment/hasLateinit.kt.after | 4 ++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 4 files changed, 17 insertions(+) create mode 100644 idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt create mode 100644 idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/JoinDeclarationAndAssignmentIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/JoinDeclarationAndAssignmentIntention.kt index b42c17fe018..81910e6e710 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/JoinDeclarationAndAssignmentIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/JoinDeclarationAndAssignmentIntention.kt @@ -78,6 +78,8 @@ class JoinDeclarationAndAssignmentIntention : SelfTargetingOffsetIndependentInte val initializer = assignment.right ?: return val newInitializer = element.setInitializer(initializer)!! + if (element.hasModifier(KtTokens.LATEINIT_KEYWORD)) element.removeModifier(KtTokens.LATEINIT_KEYWORD) + val initializerBlock = assignment.parent.parent as? KtAnonymousInitializer assignment.delete() if (initializerBlock != null && (initializerBlock.body as? KtBlockExpression)?.isEmpty() == true) { diff --git a/idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt b/idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt new file mode 100644 index 00000000000..94f4aef1878 --- /dev/null +++ b/idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt @@ -0,0 +1,5 @@ +fun foo(a: String, b: String) { + lateinit var c: String + c = a + c = b +} \ No newline at end of file diff --git a/idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt.after b/idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt.after new file mode 100644 index 00000000000..fd6204f8b92 --- /dev/null +++ b/idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt.after @@ -0,0 +1,4 @@ +fun foo(a: String, b: String) { + var c: String = a + c = b +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index a19157ec334..425999ebfe2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -9848,6 +9848,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("hasLateinit.kt") + public void testHasLateinit() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/joinDeclarationAndAssignment/hasLateinit.kt"); + doTest(fileName); + } + @TestMetadata("incorrectConditionalAssignment.kt") public void testIncorrectConditionalAssignment() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/joinDeclarationAndAssignment/incorrectConditionalAssignment.kt");