[Analysis API test] migrate more tests from doTestByModuleStructure to doTestByMainFile
^KT-64805
This commit is contained in:
committed by
Space Team
parent
cbae92f5c6
commit
052622b862
+5
-12
@@ -1,30 +1,23 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.callResolver
|
package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.callResolver
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|
||||||
import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo
|
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.stringRepresentation
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.stringRepresentation
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
|
|
||||||
abstract class AbstractMultiModuleResolveCallTest : AbstractAnalysisApiBasedTest() {
|
abstract class AbstractMultiModuleResolveCallTest : AbstractAnalysisApiBasedTest() {
|
||||||
final override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val (expression, _) =
|
val expression = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtExpression>(mainFile)
|
||||||
testServices.expressionMarkerProvider.getElementsOfTypeAtCarets<KtExpression>(moduleStructure, testServices)
|
|
||||||
.single()
|
|
||||||
|
|
||||||
val actual = executeOnPooledThreadInReadAction {
|
val actual = executeOnPooledThreadInReadAction {
|
||||||
analyseForTest(expression) {
|
analyseForTest(expression) {
|
||||||
expression.resolveCall()?.let { stringRepresentation(it) }
|
expression.resolveCall()?.let { stringRepresentation(it) }
|
||||||
|
|||||||
+6
-6
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -14,16 +14,16 @@ import org.jetbrains.kotlin.test.services.TestServices
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractCodeFragmentCollectDiagnosticsTest : AbstractCollectDiagnosticsTest() {
|
abstract class AbstractCodeFragmentCollectDiagnosticsTest : AbstractCollectDiagnosticsTest() {
|
||||||
override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val contextElement = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtElement>(ktFile)
|
val contextElement = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtElement>(mainFile)
|
||||||
|
|
||||||
val fragmentText = module.files.single().originalFile
|
val fragmentText = mainModule.files.single().originalFile
|
||||||
.run { File(parent, "$nameWithoutExtension.fragment.$extension") }
|
.run { File(parent, "$nameWithoutExtension.fragment.$extension") }
|
||||||
.readText()
|
.readText()
|
||||||
|
|
||||||
val isBlockFragment = fragmentText.any { it == '\n' }
|
val isBlockFragment = fragmentText.any { it == '\n' }
|
||||||
|
|
||||||
val project = ktFile.project
|
val project = mainFile.project
|
||||||
val factory = KtPsiFactory(project, markGenerated = false)
|
val factory = KtPsiFactory(project, markGenerated = false)
|
||||||
|
|
||||||
val codeFragment = when {
|
val codeFragment = when {
|
||||||
@@ -31,6 +31,6 @@ abstract class AbstractCodeFragmentCollectDiagnosticsTest : AbstractCollectDiagn
|
|||||||
else -> factory.createExpressionCodeFragment(fragmentText, contextElement)
|
else -> factory.createExpressionCodeFragment(fragmentText, contextElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
super.doTestByFileStructure(codeFragment, module, testServices)
|
super.doTestByMainFile(codeFragment, mainModule, testServices)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+6
-14
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -10,7 +10,6 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticCheckerFilter
|
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticCheckerFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnosticWithPsi
|
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnosticWithPsi
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnRangeInPsiFile
|
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnRangeInPsiFile
|
||||||
import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn
|
import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -18,28 +17,21 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
abstract class AbstractCollectDiagnosticsTest : AbstractAnalysisApiBasedTest() {
|
abstract class AbstractCollectDiagnosticsTest : AbstractAnalysisApiBasedTest() {
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val lastModule = moduleStructure.modules.last()
|
|
||||||
val firstKtFileFile = testServices.ktModuleProvider.getModuleFiles(lastModule).firstNotNullOf { it as? KtFile }
|
|
||||||
doTestByFileStructure(firstKtFileFile, lastModule, testServices)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) {
|
|
||||||
fun TextRange.asLineColumnRange(): String {
|
fun TextRange.asLineColumnRange(): String {
|
||||||
return getLineAndColumnRangeInPsiFile(ktFile, this).toString()
|
return getLineAndColumnRangeInPsiFile(mainFile, this).toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
analyseForTest(ktFile) {
|
analyseForTest(mainFile) {
|
||||||
val diagnosticsInFile =
|
val diagnosticsInFile =
|
||||||
ktFile.collectDiagnosticsForFile(KtDiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS).map { it.getKey() }.sorted()
|
mainFile.collectDiagnosticsForFile(KtDiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS).map { it.getKey() }.sorted()
|
||||||
val diagnosticsFromElements = buildList {
|
val diagnosticsFromElements = buildList {
|
||||||
ktFile.accept(object : KtTreeVisitorVoid() {
|
mainFile.accept(object : KtTreeVisitorVoid() {
|
||||||
override fun visitKtElement(element: KtElement) {
|
override fun visitKtElement(element: KtElement) {
|
||||||
for (diagnostic in element.getDiagnostics(KtDiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS)) {
|
for (diagnostic in element.getDiagnostics(KtDiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS)) {
|
||||||
add(element to diagnostic.getKey())
|
add(element to diagnostic.getKey())
|
||||||
|
|||||||
+5
-5
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.test.model.TestModule
|
|||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
|
|
||||||
abstract class AbstractDanglingFileCollectDiagnosticsTest : AbstractCollectDiagnosticsTest() {
|
abstract class AbstractDanglingFileCollectDiagnosticsTest : AbstractCollectDiagnosticsTest() {
|
||||||
override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val ktPsiFactory = KtPsiFactory.contextual(ktFile, markGenerated = true, eventSystemEnabled = false)
|
val ktPsiFactory = KtPsiFactory.contextual(mainFile, markGenerated = true, eventSystemEnabled = false)
|
||||||
val fakeKtFile = ktPsiFactory.createFile("fake.kt", ktFile.text)
|
val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainFile.text)
|
||||||
|
|
||||||
super.doTestByFileStructure(fakeKtFile, module, testServices)
|
super.doTestByMainFile(fakeKtFile, mainModule, testServices)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-9
@@ -1,27 +1,22 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.multiplatformInfoProvider
|
package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.multiplatformInfoProvider
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
|
|
||||||
abstract class AbstractExpectForActualTest : AbstractAnalysisApiBasedTest() {
|
abstract class AbstractExpectForActualTest : AbstractAnalysisApiBasedTest() {
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val (declaration, _) = moduleStructure.modules.flatMap { module ->
|
val declaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtDeclaration>(mainFile)
|
||||||
val ktFiles = testServices.ktModuleProvider.getModuleFiles(module).filterIsInstance<KtFile>()
|
|
||||||
testServices.expressionMarkerProvider.getElementsOfTypeAtCarets<KtDeclaration>(ktFiles)
|
|
||||||
}.single()
|
|
||||||
|
|
||||||
val expectedSymbolText: String? = executeOnPooledThreadInReadAction {
|
val expectedSymbolText: String? = executeOnPooledThreadInReadAction {
|
||||||
analyseForTest(declaration) {
|
analyseForTest(declaration) {
|
||||||
val expectedSymbols = declaration.getSymbol().getExpectsForActual()
|
val expectedSymbols = declaration.getSymbol().getExpectsForActual()
|
||||||
|
|||||||
+5
-7
@@ -13,17 +13,15 @@ import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModulePr
|
|||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
|
import org.jetbrains.kotlin.test.services.moduleStructure
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.util.PrivateForInline
|
|
||||||
|
|
||||||
abstract class AbstractAnalysisApiKtTypeByPsiTypeProviderTest : AbstractAnalysisApiBasedTest() {
|
abstract class AbstractAnalysisApiKtTypeByPsiTypeProviderTest : AbstractAnalysisApiBasedTest() {
|
||||||
@OptIn(PrivateForInline::class)
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
val psiMethod = testServices.moduleStructure.modules.map { module ->
|
||||||
val ktFile = moduleStructure.modules.map { testServices.ktModuleProvider.getModuleFiles(it).filterIsInstance<KtFile>().first() }.first()
|
|
||||||
val psiMethod = moduleStructure.modules.map { module ->
|
|
||||||
val psiFiles = testServices.ktModuleProvider.getModuleFiles(module).filterIsInstance<PsiJavaFile>()
|
val psiFiles = testServices.ktModuleProvider.getModuleFiles(module).filterIsInstance<PsiJavaFile>()
|
||||||
val javaFile = psiFiles.first()
|
val javaFile = psiFiles.first()
|
||||||
val offset = testServices.expressionMarkerProvider.getCaretPosition(javaFile)
|
val offset = testServices.expressionMarkerProvider.getCaretPosition(javaFile)
|
||||||
@@ -32,7 +30,7 @@ abstract class AbstractAnalysisApiKtTypeByPsiTypeProviderTest : AbstractAnalysis
|
|||||||
|
|
||||||
val actual = buildString {
|
val actual = buildString {
|
||||||
executeOnPooledThreadInReadAction {
|
executeOnPooledThreadInReadAction {
|
||||||
analyseForTest(ktFile) {
|
analyseForTest(mainFile) {
|
||||||
val returnType = psiMethod.returnType
|
val returnType = psiMethod.returnType
|
||||||
testServices.assertions.assertNotNull(returnType)
|
testServices.assertions.assertNotNull(returnType)
|
||||||
val asKtTypeSuper = returnType!!.asKtType(psiMethod)!!
|
val asKtTypeSuper = returnType!!.asKtType(psiMethod)!!
|
||||||
|
|||||||
+5
-10
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -9,28 +9,23 @@ import org.jetbrains.kotlin.analysis.api.analyze
|
|||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AnalysisApiPsiTypeProviderTestUtils.findLightDeclarationContext
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AnalysisApiPsiTypeProviderTestUtils.findLightDeclarationContext
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AnalysisApiPsiTypeProviderTestUtils.getContainingKtLightClass
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.psiTypeProvider.AnalysisApiPsiTypeProviderTestUtils.getContainingKtLightClass
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
abstract class AbstractAnalysisApiPsiTypeProviderTest : AbstractAnalysisApiBasedTest() {
|
abstract class AbstractAnalysisApiPsiTypeProviderTest : AbstractAnalysisApiBasedTest() {
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val (declaration, ktFile) = moduleStructure.modules.flatMap { module ->
|
val declaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtDeclaration>(mainFile)
|
||||||
val ktFiles = testServices.ktModuleProvider.getModuleFiles(module).filterIsInstance<KtFile>()
|
|
||||||
testServices.expressionMarkerProvider.getElementsOfTypeAtCarets<KtDeclaration>(ktFiles)
|
|
||||||
}.single()
|
|
||||||
|
|
||||||
val psiContext = if (KtPsiUtil.isLocal(declaration)) {
|
val psiContext = if (KtPsiUtil.isLocal(declaration)) {
|
||||||
declaration
|
declaration
|
||||||
} else {
|
} else {
|
||||||
val containingClass = getContainingKtLightClass(declaration, ktFile)
|
val containingClass = getContainingKtLightClass(declaration, mainFile)
|
||||||
containingClass.findLightDeclarationContext(declaration) ?: error("Can't find psi context for $declaration")
|
containingClass.findLightDeclarationContext(declaration) ?: error("Can't find psi context for $declaration")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-20
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -12,14 +12,11 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.resolve.extensions
|
|||||||
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
|
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
|
|
||||||
@@ -29,22 +26,8 @@ abstract class AbstractResolveExtensionInfoProviderTest : AbstractAnalysisApiBas
|
|||||||
KtResolveExtensionTestSupport.configure(builder)
|
KtResolveExtensionTestSupport.configure(builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun List<TestModule>.findMainModule(): TestModule =
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
singleOrNull()
|
analyseForTest(mainFile) {
|
||||||
?: find { it.name == "main" }
|
|
||||||
?: error("There should either be a single module, or a module named 'main'.")
|
|
||||||
|
|
||||||
private fun List<KtFile>.findMainKt(): KtFile =
|
|
||||||
singleOrNull()
|
|
||||||
?: find { it.name == "main.kt" }
|
|
||||||
?: error("There should either be a single Kotlin file in the main module, or a file named 'main.kt'.")
|
|
||||||
|
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
|
||||||
val mainModule = moduleStructure.modules.findMainModule()
|
|
||||||
val ktFiles = testServices.ktModuleProvider.getModuleFiles(mainModule).filterIsInstance<KtFile>()
|
|
||||||
val mainKt = ktFiles.findMainKt()
|
|
||||||
|
|
||||||
analyseForTest(mainKt) {
|
|
||||||
val resolveExtensionScope = getResolveExtensionScopeWithTopLevelDeclarations()
|
val resolveExtensionScope = getResolveExtensionScopeWithTopLevelDeclarations()
|
||||||
|
|
||||||
val actual = resolveExtensionScope.renderSymbolsWithExtendedPsiInfo(pretty = false)
|
val actual = resolveExtensionScope.renderSymbolsWithExtendedPsiInfo(pretty = false)
|
||||||
|
|||||||
+6
-11
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.analysis.api.analyzeCopy
|
|||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractDanglingFileReferenceResolveTest.Directives.COPY_RESOLUTION_MODE
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractDanglingFileReferenceResolveTest.Directives.COPY_RESOLUTION_MODE
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.DanglingFileResolutionMode
|
import org.jetbrains.kotlin.analysis.project.structure.DanglingFileResolutionMode
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
|||||||
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
|
|
||||||
abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResolveTest() {
|
abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResolveTest() {
|
||||||
@@ -49,17 +47,14 @@ abstract class AbstractDanglingFileReferenceResolveTest : AbstractReferenceResol
|
|||||||
return containingFile.name
|
return containingFile.name
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val mainModule = findMainModule(moduleStructure)
|
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainFile)
|
||||||
val ktFiles = testServices.ktModuleProvider.getModuleFiles(mainModule).filterIsInstance<KtFile>()
|
|
||||||
val mainKtFile = findMainFile(ktFiles)
|
|
||||||
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile)
|
|
||||||
|
|
||||||
val ktPsiFactory = KtPsiFactory.contextual(mainKtFile, markGenerated = true, eventSystemEnabled = true)
|
val ktPsiFactory = KtPsiFactory.contextual(mainFile, markGenerated = true, eventSystemEnabled = true)
|
||||||
val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainKtFile.text)
|
val fakeKtFile = ktPsiFactory.createFile("fake.kt", mainFile.text)
|
||||||
|
|
||||||
if (mainModule.directives.contains(COPY_RESOLUTION_MODE)) {
|
if (mainModule.directives.contains(COPY_RESOLUTION_MODE)) {
|
||||||
fakeKtFile.originalFile = mainKtFile
|
fakeKtFile.originalFile = mainFile
|
||||||
}
|
}
|
||||||
|
|
||||||
doTestByFileStructure(fakeKtFile, caretPosition, mainModule, testServices)
|
doTestByFileStructure(fakeKtFile, caretPosition, mainModule, testServices)
|
||||||
|
|||||||
+7
-26
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.analysis.api.renderer.declarations.renderers.callabl
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives
|
import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.unwrapMultiReferences
|
import org.jetbrains.kotlin.analysis.test.framework.utils.unwrapMultiReferences
|
||||||
import org.jetbrains.kotlin.idea.references.KtReference
|
import org.jetbrains.kotlin.idea.references.KtReference
|
||||||
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
|||||||
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
|
|
||||||
@@ -47,26 +45,9 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val mainModule = findMainModule(moduleStructure)
|
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainFile)
|
||||||
val ktFiles = testServices.ktModuleProvider.getModuleFiles(mainModule).filterIsInstance<KtFile>()
|
doTestByFileStructure(mainFile, caretPosition, mainModule, testServices)
|
||||||
val mainKtFile = findMainFile(ktFiles)
|
|
||||||
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile)
|
|
||||||
doTestByFileStructure(mainKtFile, caretPosition, mainModule, testServices)
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun findMainModule(moduleStructure: TestModuleStructure): TestModule {
|
|
||||||
val modules = moduleStructure.modules
|
|
||||||
|
|
||||||
return modules.singleOrNull()
|
|
||||||
?: modules.find { it.name == "main" }
|
|
||||||
?: error("There should be a module named 'main' in the multi-module test.")
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun findMainFile(ktFiles: List<KtFile>): KtFile {
|
|
||||||
return ktFiles.singleOrNull()
|
|
||||||
?: ktFiles.firstOrNull { it.name == "main.kt" }
|
|
||||||
?: ktFiles.first()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun doTestByFileStructure(ktFile: KtFile, caretPosition: Int, mainModule: TestModule, testServices: TestServices) {
|
protected fun doTestByFileStructure(ktFile: KtFile, caretPosition: Int, mainModule: TestModule, testServices: TestServices) {
|
||||||
@@ -79,8 +60,8 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
|
|||||||
val symbols = ktReferences.flatMap { it.resolveToSymbols() }
|
val symbols = ktReferences.flatMap { it.resolveToSymbols() }
|
||||||
checkReferenceResultForValidity(ktReferences, mainModule, testServices, symbols)
|
checkReferenceResultForValidity(ktReferences, mainModule, testServices, symbols)
|
||||||
val renderPsiClassName = Directives.RENDER_PSI_CLASS_NAME in mainModule.directives
|
val renderPsiClassName = Directives.RENDER_PSI_CLASS_NAME in mainModule.directives
|
||||||
renderResolvedTo(symbols, renderPsiClassName, renderingOptions) { getAdditionalSymbolInfo(it) }
|
renderResolvedTo(symbols, renderPsiClassName, renderingOptions) { getAdditionalSymbolInfo(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Directives.UNRESOLVED_REFERENCE in mainModule.directives) {
|
if (Directives.UNRESOLVED_REFERENCE in mainModule.directives) {
|
||||||
return
|
return
|
||||||
@@ -103,7 +84,7 @@ abstract class AbstractReferenceResolveTest : AbstractAnalysisApiBasedTest() {
|
|||||||
references: List<KtReference>,
|
references: List<KtReference>,
|
||||||
module: TestModule,
|
module: TestModule,
|
||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
resolvedTo: List<KtSymbol>
|
resolvedTo: List<KtSymbol>,
|
||||||
) {
|
) {
|
||||||
if (Directives.UNRESOLVED_REFERENCE in module.directives) {
|
if (Directives.UNRESOLVED_REFERENCE in module.directives) {
|
||||||
testServices.assertions.assertTrue(resolvedTo.isEmpty()) {
|
testServices.assertions.assertTrue(resolvedTo.isEmpty()) {
|
||||||
|
|||||||
+11
-17
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParamet
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
||||||
@@ -33,7 +32,6 @@ import org.jetbrains.kotlin.test.directives.model.Directive
|
|||||||
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
@@ -53,14 +51,8 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiBasedTest() {
|
|||||||
|
|
||||||
abstract fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData
|
abstract fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData
|
||||||
|
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val lastModule = moduleStructure.modules.last()
|
val directives = mainModule.directives
|
||||||
val firstKtFileFile = testServices.ktModuleProvider.getModuleFiles(lastModule).firstNotNullOf { it as? KtFile }
|
|
||||||
doTestByFileStructure(firstKtFileFile, lastModule, testServices)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) {
|
|
||||||
val directives = module.directives
|
|
||||||
val directiveToIgnoreSymbolRestore = directives.doNotCheckSymbolRestoreDirective()
|
val directiveToIgnoreSymbolRestore = directives.doNotCheckSymbolRestoreDirective()
|
||||||
val directiveToIgnoreNonPsiSymbolRestore = directives.doNotCheckNonPsiSymbolRestoreDirective()
|
val directiveToIgnoreNonPsiSymbolRestore = directives.doNotCheckNonPsiSymbolRestoreDirective()
|
||||||
|
|
||||||
@@ -97,10 +89,10 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiBasedTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val pointersWithRendered = executeOnPooledThreadInReadAction {
|
val pointersWithRendered = executeOnPooledThreadInReadAction {
|
||||||
analyseForTest(ktFile) {
|
analyseForTest(mainFile) {
|
||||||
val (symbols, symbolForPrettyRendering) = collectSymbols(ktFile, testServices)
|
val (symbols, symbolForPrettyRendering) = collectSymbols(mainFile, testServices)
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
checkContainingFileSymbol(ktFile.getFileSymbol(), symbol, testServices)
|
checkContainingFileSymbol(mainFile.getFileSymbol(), symbol, testServices)
|
||||||
}
|
}
|
||||||
|
|
||||||
val pointerWithRenderedSymbol = symbols
|
val pointerWithRenderedSymbol = symbols
|
||||||
@@ -143,12 +135,12 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiBasedTest() {
|
|||||||
|
|
||||||
compareResults(pointersWithRendered, testServices)
|
compareResults(pointersWithRendered, testServices)
|
||||||
|
|
||||||
configurator.doGlobalModuleStateModification(ktFile.project)
|
configurator.doGlobalModuleStateModification(mainFile.project)
|
||||||
|
|
||||||
restoreSymbolsInOtherReadActionAndCompareResults(
|
restoreSymbolsInOtherReadActionAndCompareResults(
|
||||||
directiveToIgnore = directiveToIgnoreSymbolRestore,
|
directiveToIgnore = directiveToIgnoreSymbolRestore,
|
||||||
isRegularPointers = true,
|
isRegularPointers = true,
|
||||||
ktFile = ktFile,
|
ktFile = mainFile,
|
||||||
pointersWithRendered = pointersWithRendered.pointers,
|
pointersWithRendered = pointersWithRendered.pointers,
|
||||||
testServices = testServices,
|
testServices = testServices,
|
||||||
directives = directives,
|
directives = directives,
|
||||||
@@ -158,7 +150,7 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiBasedTest() {
|
|||||||
restoreSymbolsInOtherReadActionAndCompareResults(
|
restoreSymbolsInOtherReadActionAndCompareResults(
|
||||||
directiveToIgnore = directiveToIgnoreNonPsiSymbolRestore,
|
directiveToIgnore = directiveToIgnoreNonPsiSymbolRestore,
|
||||||
isRegularPointers = false,
|
isRegularPointers = false,
|
||||||
ktFile = ktFile,
|
ktFile = mainFile,
|
||||||
pointersWithRendered = pointersWithRendered.pointers,
|
pointersWithRendered = pointersWithRendered.pointers,
|
||||||
testServices = testServices,
|
testServices = testServices,
|
||||||
directives = directives,
|
directives = directives,
|
||||||
@@ -334,6 +326,8 @@ object SymbolTestDirectives : SimpleDirectivesContainer() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
val PRETTY_RENDERER_OPTION by enumDirective(description = "Explicit rendering mode") { PrettyRendererOption.valueOf(it) }
|
val PRETTY_RENDERER_OPTION by enumDirective(description = "Explicit rendering mode") { PrettyRendererOption.valueOf(it) }
|
||||||
|
|
||||||
|
val TARGET_FILE_NAME by stringDirective(description = "The name of the main file")
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class PrettyRendererOption(val transformation: (KtDeclarationRenderer) -> KtDeclarationRenderer) {
|
enum class PrettyRendererOption(val transformation: (KtDeclarationRenderer) -> KtDeclarationRenderer) {
|
||||||
|
|||||||
+6
-11
@@ -1,26 +1,21 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.components.psiDeclarationProvider
|
package org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.components.psiDeclarationProvider
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
|
|
||||||
public abstract class AbstractPsiDeclarationProviderMultiModuleBinaryTest : AbstractAnalysisApiBasedTest() {
|
abstract class AbstractPsiDeclarationProviderMultiModuleBinaryTest : AbstractAnalysisApiBasedTest() {
|
||||||
override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
|
override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) {
|
||||||
val allKtFiles = moduleStructure.modules.flatMap {
|
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainFile)
|
||||||
testServices.ktModuleProvider.getModuleFiles(it).filterIsInstance<KtFile>()
|
val ktReferences = findReferencesAtCaret(mainFile, caretPosition)
|
||||||
}
|
|
||||||
val mainKtFile = allKtFiles.firstOrNull { it.name == "main.kt" } ?: allKtFiles.first()
|
|
||||||
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile)
|
|
||||||
val ktReferences = findReferencesAtCaret(mainKtFile, caretPosition)
|
|
||||||
if (ktReferences.isEmpty()) {
|
if (ktReferences.isEmpty()) {
|
||||||
testServices.assertions.fail { "No references at caret found" }
|
testServices.assertions.fail { "No references at caret found" }
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -1,4 +1,4 @@
|
|||||||
// MODULE: main
|
// MAIN_FILE_NAME: I
|
||||||
// MODULE_KIND: LibraryBinary
|
// MODULE_KIND: LibraryBinary
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
interface A {
|
interface A {
|
||||||
@@ -13,4 +13,3 @@ interface A {
|
|||||||
class I(private val p: A) : A by p
|
class I(private val p: A) : A by p
|
||||||
|
|
||||||
// class: I
|
// class: I
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// IGNORE_FE10
|
// IGNORE_FE10
|
||||||
// MODULE: main
|
// MAIN_FILE_NAME: I
|
||||||
// MODULE_KIND: LibraryBinary
|
// MODULE_KIND: LibraryBinary
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
interface A {
|
interface A {
|
||||||
|
|||||||
Reference in New Issue
Block a user