diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractDanglingFileReferenceResolveTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractDanglingFileReferenceResolveTest.kt index 4f3191ae285..ff361eeda60 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractDanglingFileReferenceResolveTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractDanglingFileReferenceResolveTest.kt @@ -48,7 +48,7 @@ abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResol } override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { - val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainFile) + val caretPositions = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile) val ktPsiFactory = KtPsiFactory.contextual(mainFile, markGenerated = true, eventSystemEnabled = true) val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainFile.text) @@ -57,7 +57,7 @@ abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResol fakeKtFile.originalFile = mainFile } - doTestByFileStructure(fakeKtFile, caretPosition, mainModule, testServices) + doTestByFileStructure(fakeKtFile, caretPositions, mainModule, testServices) } override fun analyzeReferenceElement(element: KtElement, mainModule: TestModule, action: KtAnalysisSession.() -> R): R { diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveTest.kt index 561442cbb72..fd800147915 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/references/AbstractReferenceResolveTest.kt @@ -46,11 +46,14 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() { } override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { - val caretPosition = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile).single() - doTestByFileStructure(mainFile, caretPosition, mainModule, testServices) + val caretPositions = testServices.expressionMarkerProvider.getAllCaretsPositions(mainFile) + doTestByFileStructure(mainFile, caretPositions, mainModule, testServices) } - protected fun doTestByFileStructure(ktFile: KtFile, caretPosition: Int, mainModule: TestModule, testServices: TestServices) { + protected fun doTestByFileStructure(ktFile: KtFile, caretPositions: List, mainModule: TestModule, testServices: TestServices) { + if (caretPositions.isEmpty()) { + testServices.assertions.fail { "No carets were specified for resolve test" } + } fun getRenderedReferencesForCaretPosition(caretPosition: Int): String { val ktReferences = findReferencesAtCaret(ktFile, caretPosition) @@ -67,8 +70,19 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() { return resolvedTo } - val resolvedTo = getRenderedReferencesForCaretPosition(caretPosition) - val actual = "Resolved to:\n$resolvedTo" + val resolutionAtPositions = caretPositions.map { getRenderedReferencesForCaretPosition(it) } + + val actual = if (resolutionAtPositions.size == 1) { + val singleResolutionResult = resolutionAtPositions.single() + + "Resolved to:\n$singleResolutionResult" + } else { + resolutionAtPositions + .withIndex() + .joinToString(separator = "\n\n") { (idx, resolutionResult) -> + "Caret ${idx + 1} resolved to:\n$resolutionResult" + } + } testServices.assertions.assertEqualsToTestDataFileSibling(actual) } diff --git a/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.descriptors.txt b/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.descriptors.txt new file mode 100644 index 00000000000..f9b7e73df28 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.descriptors.txt @@ -0,0 +1,26 @@ +Caret 1 resolved to: +0: (in A) var something: kotlin.Int + +Caret 2 resolved to: +0: (in A) var something: kotlin.Int + +Caret 3 resolved to: +0: (in A) var something: kotlin.Int + +Caret 4 resolved to: +0: (in A) var something: kotlin.Int + +Caret 5 resolved to: +0: (in A) var something: kotlin.Int + +Caret 6 resolved to: +0: (in A) var something: kotlin.Int + +Caret 7 resolved to: +0: (in A) var something: kotlin.Int + +Caret 8 resolved to: +0: (in A) var something: kotlin.Int + +Caret 9 resolved to: +0: (in A) var something: kotlin.Int diff --git a/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.kt b/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.kt index bf9631b8ed5..b28e61b1c43 100644 --- a/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.kt +++ b/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.kt @@ -5,16 +5,16 @@ class A { } fun A.foo(a: A) { - print(a.something) - a.something = 1 - a.something += 1 - a.something++ - --a.something + print(a.something) + a.something = 1 + a.something += 1 + a.something++ + --a.something - something++ - (something)++ - (something) = 1 - (a.something) = 1 + something++ + (something)++ + (something) = 1 + (a.something) = 1 } // MULTIRESOLVE diff --git a/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.txt b/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.txt index 2c6ce6c5e61..55e14057f17 100644 --- a/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.txt +++ b/analysis/analysis-api/testData/referenceResolve/KotlinPropertyWithGetterAndSetterAssignment.txt @@ -1,2 +1,31 @@ -Resolved to: +Caret 1 resolved to: +0: (in A) var something: kotlin.Int + +Caret 2 resolved to: +0: (in A) var something: kotlin.Int + +Caret 3 resolved to: +0: (in A) var something: kotlin.Int +1: (in A) var something: kotlin.Int + +Caret 4 resolved to: +0: (in A) var something: kotlin.Int +1: (in A) var something: kotlin.Int + +Caret 5 resolved to: +0: (in A) var something: kotlin.Int +1: (in A) var something: kotlin.Int + +Caret 6 resolved to: +0: (in A) var something: kotlin.Int +1: (in A) var something: kotlin.Int + +Caret 7 resolved to: +0: (in A) var something: kotlin.Int +1: (in A) var something: kotlin.Int + +Caret 8 resolved to: +0: (in A) var something: kotlin.Int + +Caret 9 resolved to: 0: (in A) var something: kotlin.Int