mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-03-23 15:51:59 +00:00
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.addImport.AbstractAddImportTest
|
||||
import org.jetbrains.kotlin.android.*
|
||||
import org.jetbrains.kotlin.android.quickfixes.AbstractAndroidQuickFixMultiFileTest
|
||||
import org.jetbrains.kotlin.android.configure.AbstractConfigureProjectTest
|
||||
import org.jetbrains.kotlin.android.intentions.AbstractAndroidResourceIntentionTest
|
||||
import org.jetbrains.kotlin.annotation.AbstractAnnotationProcessorBoxTest
|
||||
@@ -1158,6 +1159,10 @@ fun main(args: Array<String>) {
|
||||
testClass<AbstractAndroidResourceIntentionTest> {
|
||||
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") {
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
import com.intellij.codeInsight.ImportFilter
|
||||
import com.intellij.codeInsight.hint.HintManager
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction
|
||||
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.calls.callUtil.getParentCall
|
||||
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.scopes.ExplicitImportsScope
|
||||
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)
|
||||
reduceCandidatesBasedOnDependencyRuleViolation(result, file)
|
||||
else
|
||||
|
||||
10
idea/testData/android/quickfix/autoImports/androidRImport.after.kt
vendored
Normal file
10
idea/testData/android/quickfix/autoImports/androidRImport.after.kt
vendored
Normal file
@@ -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
idea/testData/android/quickfix/autoImports/androidRImport.before.Dependency1.kt
vendored
Normal file
5
idea/testData/android/quickfix/autoImports/androidRImport.before.Dependency1.kt
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.myapp
|
||||
|
||||
public class R {
|
||||
|
||||
}
|
||||
5
idea/testData/android/quickfix/autoImports/androidRImport.before.Dependency2.kt
vendored
Normal file
5
idea/testData/android/quickfix/autoImports/androidRImport.before.Dependency2.kt
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
package android
|
||||
|
||||
public class R {
|
||||
|
||||
}
|
||||
5
idea/testData/android/quickfix/autoImports/androidRImport.before.Dependency3.kt
vendored
Normal file
5
idea/testData/android/quickfix/autoImports/androidRImport.before.Dependency3.kt
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
package android.support.v7.appcompat
|
||||
|
||||
public class R {
|
||||
|
||||
}
|
||||
8
idea/testData/android/quickfix/autoImports/androidRImport.before.Main.kt
vendored
Normal file
8
idea/testData/android/quickfix/autoImports/androidRImport.before.Main.kt
vendored
Normal file
@@ -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