Added call to ImportFilter in import quickfix (KT-14439)
#KT-14439 Fixed
This commit is contained in:
@@ -21,6 +21,7 @@ import org.intellij.lang.annotations.Language
|
|||||||
import org.jetbrains.kotlin.AbstractDataFlowValueRenderingTest
|
import org.jetbrains.kotlin.AbstractDataFlowValueRenderingTest
|
||||||
import org.jetbrains.kotlin.addImport.AbstractAddImportTest
|
import org.jetbrains.kotlin.addImport.AbstractAddImportTest
|
||||||
import org.jetbrains.kotlin.android.*
|
import org.jetbrains.kotlin.android.*
|
||||||
|
import org.jetbrains.kotlin.android.quickfixes.AbstractAndroidQuickFixMultiFileTest
|
||||||
import org.jetbrains.kotlin.android.configure.AbstractConfigureProjectTest
|
import org.jetbrains.kotlin.android.configure.AbstractConfigureProjectTest
|
||||||
import org.jetbrains.kotlin.android.intentions.AbstractAndroidResourceIntentionTest
|
import org.jetbrains.kotlin.android.intentions.AbstractAndroidResourceIntentionTest
|
||||||
import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessorBoxTest
|
import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessorBoxTest
|
||||||
@@ -1158,6 +1159,10 @@ fun main(args: Array<String>) {
|
|||||||
testClass<AbstractAndroidResourceIntentionTest> {
|
testClass<AbstractAndroidResourceIntentionTest> {
|
||||||
model("android/resourceIntentions", extension = "test", singleClass = true)
|
model("android/resourceIntentions", extension = "test", singleClass = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractAndroidQuickFixMultiFileTest>() {
|
||||||
|
model("android/quickfix", pattern = """^(\w+)\.((before\.Main\.\w+)|(test))$""", testMethod = "doTestWithExtraFile")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testGroup("plugins/plugins-tests/tests", "plugins/android-extensions/android-extensions-jps/testData") {
|
testGroup("plugins/plugins-tests/tests", "plugins/android-extensions/android-extensions-jps/testData") {
|
||||||
|
|||||||
+62
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.android.quickfixes;
|
||||||
|
|
||||||
|
import com.intellij.facet.FacetManager;
|
||||||
|
import com.intellij.facet.ModifiableFacetModel;
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
|
import org.jetbrains.android.facet.AndroidFacet;
|
||||||
|
import org.jetbrains.kotlin.idea.quickfix.AbstractQuickFixMultiFileTest;
|
||||||
|
|
||||||
|
public abstract class AbstractAndroidQuickFixMultiFileTest extends AbstractQuickFixMultiFileTest {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
addAndroidFacet();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doTestWithExtraFile(String beforeFileName) throws Exception {
|
||||||
|
addManifest();
|
||||||
|
super.doTestWithExtraFile(beforeFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doTestWithoutExtraFile(String beforeFileName) throws Exception {
|
||||||
|
addManifest();
|
||||||
|
super.doTestWithoutExtraFile(beforeFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addAndroidFacet() {
|
||||||
|
FacetManager facetManager = FacetManager.getInstance(myModule);
|
||||||
|
AndroidFacet facet = facetManager.createFacet(AndroidFacet.getFacetType(), "Android", null);
|
||||||
|
|
||||||
|
final ModifiableFacetModel facetModel = facetManager.createModifiableModel();
|
||||||
|
facetModel.addFacet(facet);
|
||||||
|
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
facetModel.commit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addManifest() throws Exception {
|
||||||
|
configureByFile("idea/testData/android/AndroidManifest.xml");
|
||||||
|
}
|
||||||
|
}
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.android.quickfixes;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("idea/testData/android/quickfix")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public class AndroidQuickFixMultiFileTestGenerated extends AbstractAndroidQuickFixMultiFileTest {
|
||||||
|
public void testAllFilesPresentInQuickfix() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/android/quickfix"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("idea/testData/android/quickfix/autoImports")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class AutoImports extends AbstractAndroidQuickFixMultiFileTest {
|
||||||
|
public void testAllFilesPresentInAutoImports() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/android/quickfix/autoImports"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("androidRImport.before.Main.kt")
|
||||||
|
public void testAndroidRImport() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/android/quickfix/autoImports/androidRImport.before.Main.kt");
|
||||||
|
doTestWithExtraFile(fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.quickfix
|
package org.jetbrains.kotlin.idea.quickfix
|
||||||
|
|
||||||
|
import com.intellij.codeInsight.ImportFilter
|
||||||
import com.intellij.codeInsight.hint.HintManager
|
import com.intellij.codeInsight.hint.HintManager
|
||||||
import com.intellij.codeInsight.intention.HighPriorityAction
|
import com.intellij.codeInsight.intention.HighPriorityAction
|
||||||
import com.intellij.codeInsight.intention.IntentionAction
|
import com.intellij.codeInsight.intention.IntentionAction
|
||||||
@@ -66,6 +67,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getParentCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getParentCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency
|
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ExplicitImportsScope
|
import org.jetbrains.kotlin.resolve.scopes.ExplicitImportsScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.utils.addImportingScope
|
import org.jetbrains.kotlin.resolve.scopes.utils.addImportingScope
|
||||||
@@ -176,6 +178,8 @@ internal abstract class ImportFixBase<T : KtExpression> protected constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = result.filter { ImportFilter.shouldImport(file, it.fqNameSafe.asString()) }
|
||||||
|
|
||||||
return if (result.size > 1)
|
return if (result.size > 1)
|
||||||
reduceCandidatesBasedOnDependencyRuleViolation(result, file)
|
reduceCandidatesBasedOnDependencyRuleViolation(result, file)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// "Import" "true"
|
||||||
|
// ERROR: Unresolved reference: R
|
||||||
|
|
||||||
|
package com.myapp.activity
|
||||||
|
|
||||||
|
import com.myapp.R
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
val a = <caret>R.layout.activity_test_kotlin
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package com.myapp
|
||||||
|
|
||||||
|
public class R {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package android
|
||||||
|
|
||||||
|
public class R {
|
||||||
|
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package android.support.v7.appcompat
|
||||||
|
|
||||||
|
public class R {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// "Import" "true"
|
||||||
|
// ERROR: Unresolved reference: R
|
||||||
|
|
||||||
|
package com.myapp.activity
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
val a = <caret>R.layout.activity_test_kotlin
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user