Fixed KT-2483 "Add import" quick fix offers adding import to non-API class

#KT-2483 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-02-10 13:14:47 +03:00
parent 546836d5dd
commit b091eaa3cd
5 changed files with 28 additions and 3 deletions
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.idea.caches.JetShortNamesCache
import org.jetbrains.kotlin.idea.caches.KotlinIndicesHelper import org.jetbrains.kotlin.idea.caches.KotlinIndicesHelper
import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
import org.jetbrains.kotlin.idea.util.JetPsiHeuristicsUtil
import java.util.ArrayList import java.util.ArrayList
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
@@ -142,7 +141,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
val indicesHelper = KotlinIndicesHelper(file.getProject(), resolutionFacade, bindingContext, searchScope, moduleDescriptor, ::isVisible) val indicesHelper = KotlinIndicesHelper(file.getProject(), resolutionFacade, bindingContext, searchScope, moduleDescriptor, ::isVisible)
if (!element.isImportDirectiveExpression() && !JetPsiUtil.isSelectorInQualified(element)) { if (!element.isImportDirectiveExpression() && !JetPsiUtil.isSelectorInQualified(element)) {
result.addAll(getClasses(referenceName, file, searchScope)) getClasses(referenceName, file, searchScope).filterTo(result, ::isVisible)
result.addAll(getTopLevelCallables(referenceName, element, indicesHelper)) result.addAll(getTopLevelCallables(referenceName, element, indicesHelper))
} }
@@ -159,7 +158,6 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
private fun getClasses(name: String, file: JetFile, searchScope: GlobalSearchScope): Collection<DeclarationDescriptor> private fun getClasses(name: String, file: JetFile, searchScope: GlobalSearchScope): Collection<DeclarationDescriptor>
= getShortNamesCache(file).getClassesByName(name, searchScope) = getShortNamesCache(file).getClassesByName(name, searchScope)
.filter { JetPsiHeuristicsUtil.isAccessible(it, file) }
.map { element.getResolutionFacade().psiClassToDescriptor(it) } .map { element.getResolutionFacade().psiClassToDescriptor(it) }
.filterNotNull() .filterNotNull()
.toSet() .toSet()
@@ -0,0 +1,6 @@
// "class com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFixBase" "false"
// ERROR: Unresolved reference: Nested
fun test() {
Nested
}
@@ -0,0 +1,10 @@
// "class com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFixBase" "false"
// ACTION: Create local variable 'Nested'
// ACTION: Create object 'Nested'
// ACTION: Create parameter 'Nested'
// ACTION: Create property 'Nested'
// ERROR: Unresolved reference: Nested
fun test() {
<caret>Nested
}
@@ -0,0 +1,5 @@
package sometest
private class PrivateClass {
class Nested
}
@@ -152,6 +152,12 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
doTestWithExtraFile(fileName); doTestWithExtraFile(fileName);
} }
@TestMetadata("noImportForNestedInPrivate.before.Main.kt")
public void testNoImportForNestedInPrivate() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noImportForNestedInPrivate.before.Main.kt");
doTestWithExtraFile(fileName);
}
@TestMetadata("noImportForPrivateClass.before.Main.kt") @TestMetadata("noImportForPrivateClass.before.Main.kt")
public void testNoImportForPrivateClass() throws Exception { public void testNoImportForPrivateClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noImportForPrivateClass.before.Main.kt"); String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noImportForPrivateClass.before.Main.kt");