From 67cc83af0530d512398b210e7dc0a9cdceafecd6 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 26 Sep 2016 11:40:31 +0300 Subject: [PATCH] Quick-fix for UNNECESSARY_LATEINIT (cherry picked from commit 77f7bb0) --- .../kotlin/idea/quickfix/QuickFixRegistrar.kt | 1 + .../lateinitWithConstructor.kt | 9 ++++ .../lateinitWithConstructor.kt.after | 9 ++++ .../unnecessaryLateinit/lateinitWithInit.kt | 9 ++++ .../lateinitWithInit.kt.after | 9 ++++ .../lateinitWithMultipleConstructors.kt | 13 ++++++ .../lateinitWithMultipleConstructors.kt.after | 13 ++++++ ...itWithMultipleConstructorsAndDelegation.kt | 15 +++++++ ...MultipleConstructorsAndDelegation.kt.after | 15 +++++++ .../lateinitWithMultipleInit.kt | 14 ++++++ .../lateinitWithMultipleInit.kt.after | 14 ++++++ .../secondaryConstructorDelegateItself.kt | 14 ++++++ ...econdaryConstructorDelegateItself.kt.after | 14 ++++++ .../idea/quickfix/QuickFixTestGenerated.java | 45 +++++++++++++++++++ 14 files changed, 194 insertions(+) create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt.after create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt.after create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt.after create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt.after create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt create mode 100644 idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt.after create mode 100644 idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt create mode 100644 idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index f6fa14dc329..2971bb73c52 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -105,6 +105,7 @@ class QuickFixRegistrar : QuickFixContributor { val removeRedundantModifierFactory = RemoveModifierFix.createRemoveModifierFactory(true) REDUNDANT_MODIFIER.registerFactory(removeRedundantModifierFactory) REDUNDANT_OPEN_IN_INTERFACE.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerFactory(OPEN_KEYWORD)) + UNNECESSARY_LATEINIT.registerFactory(RemoveModifierFix.createRemoveModifierFromListOwnerFactory(LATEINIT_KEYWORD)) REDUNDANT_PROJECTION.registerFactory(RemoveModifierFix.createRemoveProjectionFactory(true)) INCOMPATIBLE_MODIFIERS.registerFactory(RemoveModifierFix.createRemoveModifierFactory(false)) diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt new file mode 100644 index 00000000000..7b0afbc7942 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt @@ -0,0 +1,9 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + lateinit var bar: String + + constructor(baz: Int) { + bar = "" + } +} diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt.after b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt.after new file mode 100644 index 00000000000..b52aa46ef44 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt.after @@ -0,0 +1,9 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + var bar: String + + constructor(baz: Int) { + bar = "" + } +} diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt new file mode 100644 index 00000000000..e7aeeddb8bc --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt @@ -0,0 +1,9 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + lateinit var bar: String + + init { + bar = "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt.after b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt.after new file mode 100644 index 00000000000..e859c66a3ec --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt.after @@ -0,0 +1,9 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + var bar: String + + init { + bar = "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt new file mode 100644 index 00000000000..66bc38f2f17 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt @@ -0,0 +1,13 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + lateinit var bar: String + + constructor() { + bar = "" + } + + constructor(baz: Int) { + bar = "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt.after b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt.after new file mode 100644 index 00000000000..27c7c521fd4 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt.after @@ -0,0 +1,13 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + var bar: String + + constructor() { + bar = "" + } + + constructor(baz: Int) { + bar = "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt new file mode 100644 index 00000000000..8c51b726e04 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt @@ -0,0 +1,15 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + lateinit var bar: String + + constructor() { + bar = "" + } + + constructor(a: Int) : this() { + } + + constructor(a: Int, b: Int) : this(a) { + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt.after b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt.after new file mode 100644 index 00000000000..5df792131d9 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt.after @@ -0,0 +1,15 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + var bar: String + + constructor() { + bar = "" + } + + constructor(a: Int) : this() { + } + + constructor(a: Int, b: Int) : this(a) { + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt new file mode 100644 index 00000000000..26607b0e947 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt @@ -0,0 +1,14 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + lateinit var bar: String + var baz: Int + + init { + baz = 1 + } + + init { + bar = "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt.after b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt.after new file mode 100644 index 00000000000..72fd993ff22 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt.after @@ -0,0 +1,14 @@ +// "Remove 'lateinit' modifier" "true" + +class Foo { + var bar: String + var baz: Int + + init { + baz = 1 + } + + init { + bar = "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt b/idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt new file mode 100644 index 00000000000..a98a1e8bb28 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt @@ -0,0 +1,14 @@ +// "Remove 'lateinit' modifier" "true" +// ERROR: There's a cycle in the delegation calls chain + +class Foo { + lateinit var bar: String + + constructor() { + bar = "" + } + + constructor(a: Int) : this(a) { + bar = "a" + } +} diff --git a/idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt.after b/idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt.after new file mode 100644 index 00000000000..1bb936d17f3 --- /dev/null +++ b/idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt.after @@ -0,0 +1,14 @@ +// "Remove 'lateinit' modifier" "true" +// ERROR: There's a cycle in the delegation calls chain + +class Foo { + var bar: String + + constructor() { + bar = "" + } + + constructor(a: Int) : this(a) { + bar = "a" + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 38a41e00d53..aa7e67f527f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -9362,6 +9362,51 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } } + @TestMetadata("idea/testData/quickfix/unnecessaryLateinit") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class UnnecessaryLateinit extends AbstractQuickFixTest { + public void testAllFilesPresentInUnnecessaryLateinit() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/unnecessaryLateinit"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); + } + + @TestMetadata("lateinitWithConstructor.kt") + public void testLateinitWithConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/unnecessaryLateinit/lateinitWithConstructor.kt"); + doTest(fileName); + } + + @TestMetadata("lateinitWithInit.kt") + public void testLateinitWithInit() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/unnecessaryLateinit/lateinitWithInit.kt"); + doTest(fileName); + } + + @TestMetadata("lateinitWithMultipleConstructors.kt") + public void testLateinitWithMultipleConstructors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructors.kt"); + doTest(fileName); + } + + @TestMetadata("lateinitWithMultipleConstructorsAndDelegation.kt") + public void testLateinitWithMultipleConstructorsAndDelegation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleConstructorsAndDelegation.kt"); + doTest(fileName); + } + + @TestMetadata("lateinitWithMultipleInit.kt") + public void testLateinitWithMultipleInit() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/unnecessaryLateinit/lateinitWithMultipleInit.kt"); + doTest(fileName); + } + + @TestMetadata("secondaryConstructorDelegateItself.kt") + public void testSecondaryConstructorDelegateItself() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/unnecessaryLateinit/secondaryConstructorDelegateItself.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/testData/quickfix/unusedSuppressAnnotation") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)