From edd2d853b15cb59acf64d87ffe315764dd78c4b5 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sun, 18 Oct 2015 11:52:16 +0300 Subject: [PATCH] KT-8961 Optimize Imports adds useless import for static Java method reference #KT-8961 Fixed --- .../jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt | 5 ++--- idea/testData/editor/optimizeImports/CallableReference.kt | 6 ++++++ .../editor/optimizeImports/CallableReference.kt.after | 6 ++++++ .../kotlin/idea/imports/OptimizeImportsTestGenerated.java | 6 ++++++ 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 idea/testData/editor/optimizeImports/CallableReference.kt create mode 100644 idea/testData/editor/optimizeImports/CallableReference.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt b/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt index ae494bd6f0f..2ab2250dab6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/imports/KotlinImportOptimizer.kt @@ -29,13 +29,13 @@ import org.jetbrains.kotlin.idea.caches.resolve.getFileTopLevelScope import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.formatter.JetCodeStyleSettings import org.jetbrains.kotlin.idea.references.JetReference +import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver import org.jetbrains.kotlin.idea.util.ImportInsertHelper import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression import org.jetbrains.kotlin.psi.psiUtil.isAncestor import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.BindingContext @@ -105,8 +105,7 @@ public class KotlinImportOptimizer() : ImportOptimizer { if (!target.isExtension) { // for non-extension targets, count only non-qualified simple name usages if (element !is JetNameReferenceExpression) continue - if (element.getIdentifier() == null) continue // skip 'this' etc - if (element.getReceiverExpression() != null) continue + if (CallTypeAndReceiver.detect(element).receiver != null) continue } val importableDescriptor = target.getImportableDescriptor() diff --git a/idea/testData/editor/optimizeImports/CallableReference.kt b/idea/testData/editor/optimizeImports/CallableReference.kt new file mode 100644 index 00000000000..24b3be53364 --- /dev/null +++ b/idea/testData/editor/optimizeImports/CallableReference.kt @@ -0,0 +1,6 @@ +import javax.swing.SwingUtilities.invokeLater + +fun test() { + val ref1 = Thread::currentThread + val ref2 = ::invokeLater +} \ No newline at end of file diff --git a/idea/testData/editor/optimizeImports/CallableReference.kt.after b/idea/testData/editor/optimizeImports/CallableReference.kt.after new file mode 100644 index 00000000000..24b3be53364 --- /dev/null +++ b/idea/testData/editor/optimizeImports/CallableReference.kt.after @@ -0,0 +1,6 @@ +import javax.swing.SwingUtilities.invokeLater + +fun test() { + val ref1 = Thread::currentThread + val ref2 = ::invokeLater +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java index a67caad5ec9..303c3785db3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java @@ -47,6 +47,12 @@ public class OptimizeImportsTestGenerated extends AbstractOptimizeImportsTest { doTest(fileName); } + @TestMetadata("CallableReference.kt") + public void testCallableReference() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/editor/optimizeImports/CallableReference.kt"); + doTest(fileName); + } + @TestMetadata("ClassFromSameFileImportAddedBug.kt") public void testClassFromSameFileImportAddedBug() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/editor/optimizeImports/ClassFromSameFileImportAddedBug.kt");