diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt index 6b6aaf72214..a112cfc4e12 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt @@ -217,15 +217,15 @@ class KotlinIndicesHelper( fun getKotlinStatics(name: String): Collection { return sequenceOf(KotlinFunctionShortNameIndex.getInstance().get(name, project, scope), - KotlinPropertyShortNameIndex.getInstance().get(name, project, scope)). - flatMap { it.asSequence() } + KotlinPropertyShortNameIndex.getInstance().get(name, project, scope)) + .flatMap { it.asSequence() } .mapNotNull { when (it) { is KtNamedFunction -> it.descriptor is KtProperty -> it.descriptor else -> null } - } + }.filterNot { it.importableFqName == null } .filter(descriptorFilter) .toSet() } diff --git a/idea/testData/quickfix/autoImports/noStaticImportForClassFunction.test b/idea/testData/quickfix/autoImports/noStaticImportForClassFunction.test new file mode 100644 index 00000000000..a5949463c28 --- /dev/null +++ b/idea/testData/quickfix/autoImports/noStaticImportForClassFunction.test @@ -0,0 +1,33 @@ +// FILE: main.before.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create function 'foobar' +// ACTION: Rename reference + +//KT-9009 + + +fun f() { + foobar() +} + +//FILE: dependency.before.kt +package bar + +class Foo { + fun foobar() { + } +} + +//FILE: main.after.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create function 'foobar' +// ACTION: Rename reference + +//KT-9009 + + +fun f() { + foobar() +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/noStaticImportForClassProperty.test b/idea/testData/quickfix/autoImports/noStaticImportForClassProperty.test new file mode 100644 index 00000000000..ed87f17eed4 --- /dev/null +++ b/idea/testData/quickfix/autoImports/noStaticImportForClassProperty.test @@ -0,0 +1,35 @@ +// FILE: main.before.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create local variable 'foobar' +// ACTION: Create property 'foobar' +// ACTION: Rename reference + + +//KT-9009 + + +fun f() { + foobar = "barfoo" +} + +//FILE: dependency.before.kt +package bar + +class Foo { + var foobar = "foobar" +} + +//FILE: main.after.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create local variable 'foobar' +// ACTION: Create property 'foobar' +// ACTION: Rename reference + +//KT-9009 + + +fun f() { + foobar = "barfoo" +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticField.test b/idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticField.test new file mode 100644 index 00000000000..cc9eb1110ed --- /dev/null +++ b/idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticField.test @@ -0,0 +1,35 @@ +// FILE: main.before.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create local variable 'foobar' +// ACTION: Create property 'foobar' +// ACTION: Rename reference + + +//KT-9009 + + +fun f() { + foobar = "barfoo" +} + +//FILE: dependency.before.java +package bar + +public class Foo { + public foobar = "foobar" +} + +//FILE: main.after.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create local variable 'foobar' +// ACTION: Create property 'foobar' +// ACTION: Rename reference + +//KT-9009 + + +fun f() { + foobar = "barfoo" +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticMethod.test b/idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticMethod.test new file mode 100644 index 00000000000..f262761b34e --- /dev/null +++ b/idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticMethod.test @@ -0,0 +1,34 @@ +// FILE: main.before.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create function 'foobar' +// ACTION: Rename reference + +//KT-9009 + + +fun f() { + foobar() +} + +//FILE: dependency.before.java +package bar + +public class Foo { + public void foobar() + { + } +} + +//FILE: main.after.kt +// "Static import" "false" +// ERROR: Unresolved reference: foobar +// ACTION: Create function 'foobar' +// ACTION: Rename reference + +//KT-9009 + + +fun f() { + foobar() +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/staticImportFunction.test b/idea/testData/quickfix/autoImports/staticImportFunction.test new file mode 100644 index 00000000000..4b0c48d9d15 --- /dev/null +++ b/idea/testData/quickfix/autoImports/staticImportFunction.test @@ -0,0 +1,34 @@ +// FILE: main.before.kt +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +package foo + +fun f() { + foobar() +} + + +// FILE: dependency.before.kt +package bar + +object Foo { + fun foobar() { + } +} + +// FILE: main.after.kt +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +package foo + +import bar.Foo.foobar + +fun f() { + foobar() +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/staticImportJavaField.test b/idea/testData/quickfix/autoImports/staticImportJavaField.test new file mode 100644 index 00000000000..bd2192b1f5e --- /dev/null +++ b/idea/testData/quickfix/autoImports/staticImportJavaField.test @@ -0,0 +1,30 @@ +// FILE: first.before.kt +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +fun f() { + val k = foobar +} + + +// FILE: Bar.java + +public class Bar { + public static final String foobar = "foobar"; +} + +// FILE: first.after.kt +import Bar.foobar + +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +fun f() { + val k = foobar +} + + diff --git a/idea/testData/quickfix/autoImports/staticImportJavaMethod.test b/idea/testData/quickfix/autoImports/staticImportJavaMethod.test new file mode 100644 index 00000000000..510fee88fbe --- /dev/null +++ b/idea/testData/quickfix/autoImports/staticImportJavaMethod.test @@ -0,0 +1,33 @@ +// FILE: first.before.kt +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +fun f() { + foobar() +} + + +// FILE: Bar.java + +public class Bar { + public static void foobar() + { + + } +} + +// FILE: first.after.kt +import Bar.foobar + +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +fun f() { + foobar() +} + + diff --git a/idea/testData/quickfix/autoImports/staticImportProperty.test b/idea/testData/quickfix/autoImports/staticImportProperty.test new file mode 100644 index 00000000000..d1a488ad0e0 --- /dev/null +++ b/idea/testData/quickfix/autoImports/staticImportProperty.test @@ -0,0 +1,33 @@ +// FILE: main.before.kt +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +package foo + +fun f() { + foobar = "barfoo" +} + + +// FILE: dependency.before.kt +package bar + +object Foo { + var foobar = "foobar" +} + +// FILE: main.after.kt +// "Static import" "true" +// ERROR: Unresolved reference: foobar + +//KT-9009 + +package foo + +import bar.Foo.foobar + +fun f() { + foobar = "barfoo" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index 16d44b110b6..cbe901dd4e2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -353,6 +353,32 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes doTestWithExtraFile(fileName); } + @TestMetadata("noStaticImportForClassFunction.test") + public void testNoStaticImportForClassFunction() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noStaticImportForClassFunction.test"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("noStaticImportForClassProperty.test") + public void testNoStaticImportForClassProperty() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noStaticImportForClassProperty.test"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("noStaticImportForJavaNonStaticField.test") + public void testNoStaticImportForJavaNonStaticField() throws Exception { + String fileName = + KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticField.test"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("noStaticImportForJavaNonStaticMethod.test") + public void testNoStaticImportForJavaNonStaticMethod() throws Exception { + String fileName = + KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noStaticImportForJavaNonStaticMethod.test"); + doTestWithExtraFile(fileName); + } + @TestMetadata("notExcludedClass.before.Main.kt") public void testNotExcludedClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/notExcludedClass.before.Main.kt"); @@ -413,6 +439,30 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes doTestWithExtraFile(fileName); } + @TestMetadata("staticImportFunction.test") + public void testStaticImportFunction() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/staticImportFunction.test"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("staticImportJavaField.test") + public void testStaticImportJavaField() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/staticImportJavaField.test"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("staticImportJavaMethod.test") + public void testStaticImportJavaMethod() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/staticImportJavaMethod.test"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("staticImportProperty.test") + public void testStaticImportProperty() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/staticImportProperty.test"); + doTestWithExtraFile(fileName); + } + @TestMetadata("timesAssign.before.Main.kt") public void testTimesAssign() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/timesAssign.before.Main.kt");