From 3a606d13f022e0555e60e4291bf9fac61f9bde32 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 26 Jun 2017 10:38:45 +0300 Subject: [PATCH] Extends range of change visibility intention #KT-14093 Fixed --- .../ChangeVisibilityModifierIntention.kt | 7 +----- .../changeVisibility/private/hasModifier1.kt | 1 + .../private/hasModifier1.kt.after | 1 + .../changeVisibility/private/hasModifier2.kt | 1 + .../private/hasModifier2.kt.after | 1 + .../changeVisibility/private/hasModifier3.kt | 1 + .../private/hasModifier3.kt.after | 1 + .../changeVisibility/private/hasModifier4.kt | 1 + .../private/hasModifier4.kt.after | 1 + .../replaceJvmFieldWithConst/class.kt | 3 +++ .../nonConstantInitializer.kt | 2 ++ .../replaceJvmFieldWithConst/nullable.kt | 2 ++ .../stringTemplateWithVal.kt | 2 ++ .../intentions/IntentionTestGenerated.java | 24 +++++++++++++++++++ 14 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier1.kt create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier1.kt.after create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier2.kt create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier2.kt.after create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier3.kt create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier4.kt create mode 100644 idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt index afb9fdcb004..cd9fef153b3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ChangeVisibilityModifierIntention.kt @@ -56,14 +56,9 @@ open class ChangeVisibilityModifierIntention protected constructor( text = defaultText - val modifierElement = element.visibilityModifier() - if (modifierElement != null) { - return modifierElement.textRange - } - val defaultRange = noModifierYetApplicabilityRange(element) ?: return null - if (element is KtPrimaryConstructor && defaultRange.isEmpty) { + if (element is KtPrimaryConstructor && defaultRange.isEmpty && element.visibilityModifier() == null) { text = "Make primary constructor ${modifier.value}" // otherwise it may be confusing } diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier1.kt b/idea/testData/intentions/changeVisibility/private/hasModifier1.kt new file mode 100644 index 00000000000..a52ae33f24a --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier1.kt @@ -0,0 +1 @@ +internal annotation class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier1.kt.after b/idea/testData/intentions/changeVisibility/private/hasModifier1.kt.after new file mode 100644 index 00000000000..7d87d3e937f --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier1.kt.after @@ -0,0 +1 @@ +private annotation class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier2.kt b/idea/testData/intentions/changeVisibility/private/hasModifier2.kt new file mode 100644 index 00000000000..59ef668b87c --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier2.kt @@ -0,0 +1 @@ +internal annotation class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier2.kt.after b/idea/testData/intentions/changeVisibility/private/hasModifier2.kt.after new file mode 100644 index 00000000000..d57b1667300 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier2.kt.after @@ -0,0 +1 @@ +private annotation class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier3.kt b/idea/testData/intentions/changeVisibility/private/hasModifier3.kt new file mode 100644 index 00000000000..423ae682da4 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier3.kt @@ -0,0 +1 @@ +annotation internal class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after b/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after new file mode 100644 index 00000000000..040074d06f0 --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after @@ -0,0 +1 @@ +annotation private class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier4.kt b/idea/testData/intentions/changeVisibility/private/hasModifier4.kt new file mode 100644 index 00000000000..8bfc8068baa --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier4.kt @@ -0,0 +1 @@ +annotation internal class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after b/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after new file mode 100644 index 00000000000..ed0d8a50e7d --- /dev/null +++ b/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after @@ -0,0 +1 @@ +annotation private class Ann \ No newline at end of file diff --git a/idea/testData/quickfix/replaceJvmFieldWithConst/class.kt b/idea/testData/quickfix/replaceJvmFieldWithConst/class.kt index 84cd4ee988b..43423b44b10 100644 --- a/idea/testData/quickfix/replaceJvmFieldWithConst/class.kt +++ b/idea/testData/quickfix/replaceJvmFieldWithConst/class.kt @@ -1,6 +1,9 @@ // "Replace '@JvmField' with 'const'" "false" // WITH_RUNTIME // ERROR: JvmField has no effect on a private property +// ACTION: Make internal +// ACTION: Make protected +// ACTION: Make public // ACTION: Move to constructor // ACTION: Specify type explicitly class Foo { diff --git a/idea/testData/quickfix/replaceJvmFieldWithConst/nonConstantInitializer.kt b/idea/testData/quickfix/replaceJvmFieldWithConst/nonConstantInitializer.kt index 91a20f41a61..4913c1c6a07 100644 --- a/idea/testData/quickfix/replaceJvmFieldWithConst/nonConstantInitializer.kt +++ b/idea/testData/quickfix/replaceJvmFieldWithConst/nonConstantInitializer.kt @@ -1,6 +1,8 @@ // "Replace '@JvmField' with 'const'" "false" // WITH_RUNTIME // ERROR: JvmField has no effect on a private property +// ACTION: Make internal +// ACTION: Make public // ACTION: Remove explicit type specification fun getText() = "" @JvmField private val text: String = getText() \ No newline at end of file diff --git a/idea/testData/quickfix/replaceJvmFieldWithConst/nullable.kt b/idea/testData/quickfix/replaceJvmFieldWithConst/nullable.kt index 890a529f668..fc1d9d92a37 100644 --- a/idea/testData/quickfix/replaceJvmFieldWithConst/nullable.kt +++ b/idea/testData/quickfix/replaceJvmFieldWithConst/nullable.kt @@ -1,5 +1,7 @@ // "Replace '@JvmField' with 'const'" "false" // WITH_RUNTIME // ERROR: JvmField has no effect on a private property +// ACTION: Make internal +// ACTION: Make public // ACTION: Remove explicit type specification @JvmField private val number: Int? = 42 \ No newline at end of file diff --git a/idea/testData/quickfix/replaceJvmFieldWithConst/stringTemplateWithVal.kt b/idea/testData/quickfix/replaceJvmFieldWithConst/stringTemplateWithVal.kt index 22277bde298..28b9172821e 100644 --- a/idea/testData/quickfix/replaceJvmFieldWithConst/stringTemplateWithVal.kt +++ b/idea/testData/quickfix/replaceJvmFieldWithConst/stringTemplateWithVal.kt @@ -2,6 +2,8 @@ // WITH_RUNTIME // ERROR: JvmField has no effect on a private property // ACTION: Add 'const' modifier +// ACTION: Make internal +// ACTION: Make public // ACTION: Specify type explicitly val three = 3 @JvmField private val text = "${2 + three}" \ 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 18cae92932b..906cb749e0d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -2974,6 +2974,30 @@ public class IntentionTestGenerated extends AbstractIntentionTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/changeVisibility/private"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("hasModifier1.kt") + public void testHasModifier1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/private/hasModifier1.kt"); + doTest(fileName); + } + + @TestMetadata("hasModifier2.kt") + public void testHasModifier2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/private/hasModifier2.kt"); + doTest(fileName); + } + + @TestMetadata("hasModifier3.kt") + public void testHasModifier3() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/private/hasModifier3.kt"); + doTest(fileName); + } + + @TestMetadata("hasModifier4.kt") + public void testHasModifier4() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/private/hasModifier4.kt"); + doTest(fileName); + } + @TestMetadata("noModifierListAnnotation.kt") public void testNoModifierListAnnotation() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/changeVisibility/private/noModifierListAnnotation.kt");