Supported excluded packages/classes in auto-import quick fix.

#KT-2413 in progress
This commit is contained in:
Evgeny Gerashchenko
2015-07-06 23:01:57 +03:00
parent 2a0817a4d1
commit 5c56bc455e
13 changed files with 89 additions and 1 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.core
import com.intellij.codeInsight.CodeInsightSettings
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.StringStubIndexExtension
@@ -198,3 +199,10 @@ public class KotlinIndicesHelper(
.filter { it.getExtensionReceiverParameter() == null }
}
}
public fun isInExcludedPackage(descriptor: DeclarationDescriptor): Boolean {
val fqName = DescriptorUtils.getFqName(descriptor).asString()
return CodeInsightSettings.getInstance().EXCLUDED_PACKAGES
.any { excluded -> fqName == excluded || fqName.startsWith(excluded + ".") }
}
@@ -48,6 +48,8 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.utils.CachedValueProperty
import java.util.ArrayList
import com.intellij.codeInsight.*
import org.jetbrains.kotlin.idea.core.isInExcludedPackage
/**
* Check possibility and perform fix for unresolved references.
@@ -152,7 +154,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction<Jet
result.addAll(indicesHelper.getCallableTopLevelExtensions({ it == referenceName }, element, bindingContext))
return result
return result.filter { it -> !isInExcludedPackage(it) }
}
private fun getClasses(name: String, file: JetFile, searchScope: GlobalSearchScope): Collection<DeclarationDescriptor>
@@ -0,0 +1,6 @@
// "class com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFixBase" "false"
// ACTION: Create class 'SomeClass'
// ACTION: Create function 'SomeClass'
// ERROR: Unresolved reference: SomeClass
val x = <caret>SomeClass()
@@ -0,0 +1,3 @@
package excludedPackage
class SomeClass
@@ -0,0 +1,6 @@
// "class com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFixBase" "false"
// ACTION: Create class 'ExcludedClass'
// ACTION: Create function 'ExcludedClass'
// ERROR: Unresolved reference: ExcludedClass
val x = <caret>ExcludedClass()
@@ -0,0 +1,3 @@
package somePackage
class ExcludedClass
@@ -0,0 +1,5 @@
// "class com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFixBase" "false"
// ACTION: Create function 'someFunction'
// ERROR: Unresolved reference: someFunction
val x = <caret>someFunction()
@@ -0,0 +1,5 @@
package excludedPackage
fun someFunction() {
}
@@ -0,0 +1,6 @@
import somePackage.NotExcludedClass
// "Import" "true"
// ERROR: Unresolved reference: NotExcludedClass
val x = <caret>NotExcludedClass()
@@ -0,0 +1,4 @@
// "Import" "true"
// ERROR: Unresolved reference: NotExcludedClass
val x = <caret>NotExcludedClass()
@@ -0,0 +1,3 @@
package somePackage
class NotExcludedClass
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.quickfix;
import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase;
import com.intellij.codeInsight.intention.IntentionAction;
@@ -67,6 +68,18 @@ public abstract class AbstractQuickFixMultiFileTest extends KotlinDaemonAnalyzer
doTest(beforeFileName, true);
}
@Override
protected void setUp() throws Exception {
super.setUp();
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = new String[]{"excludedPackage", "somePackage.ExcludedClass"};
}
@Override
protected void tearDown() throws Exception {
CodeInsightSettings.getInstance().EXCLUDED_PACKAGES = ArrayUtil.EMPTY_STRING_ARRAY;
super.tearDown();
}
private void doTest(final String beforeFileName, boolean withExtraFile) throws Exception {
String testDataPath = getTestDataPath();
File mainFile = new File(testDataPath + beforeFileName);
@@ -185,6 +185,30 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
doTestWithExtraFile(fileName);
}
@TestMetadata("noImportsForClassInExcludedPackage.before.Main.kt")
public void testNoImportsForClassInExcludedPackage() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noImportsForClassInExcludedPackage.before.Main.kt");
doTestWithExtraFile(fileName);
}
@TestMetadata("noImportsForExcludedClass.before.Main.kt")
public void testNoImportsForExcludedClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noImportsForExcludedClass.before.Main.kt");
doTestWithExtraFile(fileName);
}
@TestMetadata("noImportsForFunctionInExcludedPackage.before.Main.kt")
public void testNoImportsForFunctionInExcludedPackage() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/noImportsForFunctionInExcludedPackage.before.Main.kt");
doTestWithExtraFile(fileName);
}
@TestMetadata("notExcludedClass.before.Main.kt")
public void testNotExcludedClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/notExcludedClass.before.Main.kt");
doTestWithExtraFile(fileName);
}
@TestMetadata("objectImport.before.Main.kt")
public void testObjectImport() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/objectImport.before.Main.kt");