From 0fbcf0b958c53758141d155edb66e1e206b2cfdf Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 14 Sep 2015 20:16:08 +0300 Subject: [PATCH] Extraction Engine: Report conflict on all diagnostics from UNRESOLVED_REFERENCE group #KT-9117 Fixed --- .../extractionEngine/extractableAnalysisUtil.kt | 2 +- .../basic/unresolvedWrongReceiver.kt | 13 +++++++++++++ .../basic/unresolvedWrongReceiver.kt.conflicts | 1 + .../introduce/JetExtractionTestGenerated.java | 6 ++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt create mode 100644 idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt.conflicts diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index be4d3872d9a..c21ce08a087 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -1020,7 +1020,7 @@ fun ExtractableCodeDescriptor.validate(): ExtractableCodeDescriptorWithConflicts if (currentDescriptor is LocalVariableDescriptor && parameters.any { it.mirrorVarName == currentDescriptor.getName().asString() }) continue - if (diagnostics.any { it.getFactory() == Errors.UNRESOLVED_REFERENCE } + if (diagnostics.any { it.getFactory() in Errors.UNRESOLVED_REFERENCE_DIAGNOSTICS } || (currentDescriptor != null && !ErrorUtils.isError(currentDescriptor) && !comparePossiblyOverridingDescriptors(extractionData.project, currentDescriptor, resolveResult.descriptor))) { diff --git a/idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt b/idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt new file mode 100644 index 00000000000..d69e21769e3 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt @@ -0,0 +1,13 @@ +// SIBLING: +class A { + fun foo() { + val a = B() + a.unresolved() + } + + private fun B.unresolved() = 1 +} + +class B + +private fun A.unresolved() = 1 \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt.conflicts b/idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt.conflicts new file mode 100644 index 00000000000..2020837f73d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt.conflicts @@ -0,0 +1 @@ +Function A.unresolved will no longer be accessible after extraction \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java index b2da6fe61a4..338107f45e4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java @@ -695,6 +695,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/traitFunction.kt"); doExtractFunctionTest(fileName); } + + @TestMetadata("unresolvedWrongReceiver.kt") + public void testUnresolvedWrongReceiver() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/extractFunction/basic/unresolvedWrongReceiver.kt"); + doExtractFunctionTest(fileName); + } } @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow")