diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt index 2b5f26de294..e6372aaf602 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdConsistencyTest.kt @@ -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. */ @@ -9,9 +9,9 @@ import com.intellij.psi.stubs.StubInputStream import com.intellij.psi.stubs.StubOutputStream import com.intellij.util.io.AbstractStringEnumerator import org.jetbrains.kotlin.analysis.low.level.api.fir.AbstractClassIdConsistencyTest.Directives.IGNORE_CONSISTENCY_CHECK -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.analysis.test.framework.utils.ignoreExceptionIfIgnoreDirectivePresent import org.jetbrains.kotlin.name.ClassId @@ -22,16 +22,17 @@ import org.jetbrains.kotlin.psi.psiUtil.safeFqNameForLazyResolve import org.jetbrains.kotlin.psi.stubs.StubUtils import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer -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.assertions +import org.jetbrains.kotlin.test.services.moduleStructure import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream -abstract class AbstractClassIdConsistencyTest : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - moduleStructure.allDirectives.ignoreExceptionIfIgnoreDirectivePresent(IGNORE_CONSISTENCY_CHECK) { - ktFile.forEachDescendantOfType { declaration -> +abstract class AbstractClassIdConsistencyTest : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + testServices.moduleStructure.allDirectives.ignoreExceptionIfIgnoreDirectivePresent(IGNORE_CONSISTENCY_CHECK) { + mainFile.forEachDescendantOfType { declaration -> val classId = declaration.getClassId() val fqName = declaration.safeFqNameForLazyResolve() testServices.assertions.assertEquals(fqName, classId?.asSingleFqName()) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt index fb35c7033c8..4ef22d44f5d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractClassIdTest.kt @@ -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. */ @@ -9,21 +9,21 @@ import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor import com.intellij.psi.impl.source.tree.LeafPsiElement -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClassLikeDeclaration 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.assertions -abstract class AbstractClassIdTest : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { +abstract class AbstractClassIdTest : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { val text = buildString { - ktFile.accept(object : PsiElementVisitor() { + mainFile.accept(object : PsiElementVisitor() { override fun visitElement(element: PsiElement) { if (element is KtClassLikeDeclaration) { append("/* ClassId: ${element.getClassId()} */") @@ -46,7 +46,7 @@ abstract class AbstractClassIdTest : AbstractLowLevelApiSingleFileTest() { }) } - testServices.assertions.assertEqualsToTestDataFileSibling(text, ktFile.name.substringAfterLast('.')) + testServices.assertions.assertEqualsToTestDataFileSibling(text, mainFile.name.substringAfterLast('.')) } } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractDependentCopyTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractDependentCopyTest.kt index 5d3d14cbf6f..2188f3e6446 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractDependentCopyTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractDependentCopyTest.kt @@ -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. */ @@ -7,13 +7,15 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir.getFirResolveSessionForDependentCopy -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory +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.moduleStructure import kotlin.io.path.exists import kotlin.io.path.readText @@ -24,10 +26,11 @@ import kotlin.io.path.readText * @see AbstractDependentCopyContextTest * @see AbstractDependentCopyFirTest */ -abstract class AbstractDependentCopyTest : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { +abstract class AbstractDependentCopyTest : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + val moduleStructure = testServices.moduleStructure val element = testServices.expressionMarkerProvider.getElementOfTypeAtCaretByDirective( - file = ktFile, + file = mainFile, registeredDirectives = moduleStructure.allDirectives, ) @@ -36,18 +39,18 @@ abstract class AbstractDependentCopyTest : AbstractLowLevelApiSingleFileTest() { testPrefix = null, ).takeIf { it.exists() }?.readText() - val fileCopy = KtPsiFactory(ktFile.project).createFile( - ktFile.name, - specialContentForCopiedFile ?: ktFile.text, + val fileCopy = KtPsiFactory(mainFile.project).createFile( + mainFile.name, + specialContentForCopiedFile ?: mainFile.text, ) - fileCopy.originalFile = ktFile + fileCopy.originalFile = mainFile val sameElementInCopy = PsiTreeUtil.findSameElementInCopy(element, fileCopy) - resolveWithClearCaches(ktFile) { originalSession -> + resolveWithClearCaches(mainFile) { originalSession -> val dependentSession = getFirResolveSessionForDependentCopy( originalFirResolveSession = originalSession, - originalKtFile = ktFile, + originalKtFile = mainFile, elementToAnalyze = sameElementInCopy, ) as LLFirResolveSessionDepended diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFileBasedKotlinDeclarationProviderTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFileBasedKotlinDeclarationProviderTest.kt index f85655ded1e..78f0ba092a6 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFileBasedKotlinDeclarationProviderTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFileBasedKotlinDeclarationProviderTest.kt @@ -1,15 +1,15 @@ /* - * 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. */ package org.jetbrains.kotlin.analysis.low.level.api.fir import com.intellij.psi.util.PsiTreeUtil -import org.jetbrains.kotlin.analysis.providers.impl.declarationProviders.FileBasedKotlinDeclarationProvider -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.providers.impl.declarationProviders.FileBasedKotlinDeclarationProvider +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -17,12 +17,14 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer +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.moduleStructure import kotlin.test.assertContains import kotlin.test.assertNotNull -abstract class AbstractFileBasedKotlinDeclarationProviderTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractFileBasedKotlinDeclarationProviderTest : AbstractAnalysisApiBasedTest() { override fun configureTest(builder: TestConfigurationBuilder) { super.configureTest(builder) with(builder) { @@ -30,12 +32,12 @@ abstract class AbstractFileBasedKotlinDeclarationProviderTest : AbstractLowLevel } } - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - val provider = FileBasedKotlinDeclarationProvider(ktFile) - assertContains(provider.findFilesForFacadeByPackage(ktFile.packageFqName), ktFile) + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + val provider = FileBasedKotlinDeclarationProvider(mainFile) + assertContains(provider.findFilesForFacadeByPackage(mainFile.packageFqName), mainFile) - checkByDirectives(moduleStructure, provider) - checkByVisitor(ktFile, provider) + checkByDirectives(testServices.moduleStructure, provider) + checkByVisitor(mainFile, provider) } private fun checkByDirectives(moduleStructure: TestModuleStructure, provider: FileBasedKotlinDeclarationProvider) { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyBodiesCalculatorTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyBodiesCalculatorTest.kt index e012125facb..3bc1c160344 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyBodiesCalculatorTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyBodiesCalculatorTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 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. */ @@ -7,9 +7,9 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import junit.framework.TestCase import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodiesCalculator -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.builder.BodyBuildingMode import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder @@ -19,10 +19,10 @@ import org.jetbrains.kotlin.fir.renderer.FirRenderer import org.jetbrains.kotlin.fir.scopes.kotlinScopeProvider import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid 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 -abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractFirLazyBodiesCalculatorTest : AbstractAnalysisApiBasedTest() { private val lazyChecker = object : FirVisitorVoid() { override fun visitElement(element: FirElement) { TestCase.assertFalse("${FirLazyBlock::class.qualifiedName} should not present in the tree", element is FirLazyBlock) @@ -31,8 +31,8 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi } } - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - resolveWithClearCaches(ktFile) { firResolveSession -> + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + resolveWithClearCaches(mainFile) { firResolveSession -> val session = firResolveSession.useSiteFirSession val provider = session.kotlinScopeProvider @@ -40,7 +40,7 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi session, provider, bodyBuildingMode = BodyBuildingMode.LAZY_BODIES - ).buildFirFile(ktFile) + ).buildFirFile(mainFile) FirLazyBodiesCalculator.calculateAllLazyExpressionsInFile(laziedFirFile) laziedFirFile.accept(lazyChecker) @@ -49,7 +49,7 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi session, provider, bodyBuildingMode = BodyBuildingMode.NORMAL - ).buildFirFile(ktFile) + ).buildFirFile(mainFile) val laziedFirFileDump = FirRenderer().renderElementAsString(laziedFirFile) val fullFirFileDump = FirRenderer().renderElementAsString(fullFirFile) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt index 3de33bd1deb..f2bc7cffe37 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirOnAirResolveTest.kt @@ -1,40 +1,40 @@ /* - * Copyright 2010-2021 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. */ package org.jetbrains.kotlin.analysis.low.level.api.fir import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LowLevelFirApiFacadeForResolveOnAir -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.renderer.FirRenderer import org.jetbrains.kotlin.psi.KtAnnotated import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFileAnnotationList -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.assertions import org.jetbrains.kotlin.test.util.findElementByCommentPrefix -abstract class AbstractFirOnAirResolveTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractFirOnAirResolveTest : AbstractAnalysisApiBasedTest() { override val configurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { fun fixUpAnnotations(element: KtElement): KtElement = when (element) { is KtAnnotated -> element.annotationEntries.firstOrNull() ?: element is KtFileAnnotationList -> element.annotationEntries.first() else -> element } - val place = (ktFile.findElementByCommentPrefix("/*PLACE*/") as KtElement).let(::fixUpAnnotations) - val onAir = (ktFile.findElementByCommentPrefix("/*ONAIR*/") as KtElement).let(::fixUpAnnotations) + val place = (mainFile.findElementByCommentPrefix("/*PLACE*/") as KtElement).let(::fixUpAnnotations) + val onAir = (mainFile.findElementByCommentPrefix("/*ONAIR*/") as KtElement).let(::fixUpAnnotations) check(place::class == onAir::class) - resolveWithClearCaches(ktFile) { firResolveSession -> + resolveWithClearCaches(mainFile) { firResolveSession -> check(firResolveSession.useSiteKtModule is KtSourceModule) val firElement = LowLevelFirApiFacadeForResolveOnAir.onAirResolveElement(firResolveSession, place, onAir) val rendered = FirRenderer.withResolvePhase().renderElementAsString(firElement) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt index 9d7e3da4e2e..fcf02a71e8f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractLowLevelApiCodeFragmentTest.kt @@ -1,28 +1,30 @@ /* - * 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. */ package org.jetbrains.kotlin.analysis.low.level.api.fir -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives import org.jetbrains.kotlin.test.model.TestFile +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.moduleStructure import org.jetbrains.kotlin.test.services.sourceFileProvider import java.io.File -abstract class AbstractLowLevelApiCodeFragmentTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractLowLevelApiCodeFragmentTest : AbstractAnalysisApiBasedTest() { override val configurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) abstract fun doTest(ktCodeFragment: KtCodeFragment, moduleStructure: TestModuleStructure, testServices: TestServices) - - final override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - val contextElement = testServices.expressionMarkerProvider.getElementOfTypeAtCaret(ktFile) + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + val moduleStructure = testServices.moduleStructure + val contextElement = testServices.expressionMarkerProvider.getElementOfTypeAtCaret(mainFile) val fragmentFile = moduleStructure.originalTestDataFiles.single() .run { File(parent, "$nameWithoutExtension.fragment.$extension") } @@ -40,7 +42,7 @@ abstract class AbstractLowLevelApiCodeFragmentTest : AbstractLowLevelApiSingleFi val isBlockFragment = processedFragmentText.any { it == '\n' } - val project = ktFile.project + val project = mainFile.project val factory = KtPsiFactory(project, markGenerated = false) val ktCodeFragment = when { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt index 07268b1f629..29ab266edf1 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractNonLocalDeclarationAnchorTest.kt @@ -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. */ @@ -10,28 +10,28 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor import com.intellij.psi.impl.source.tree.LeafPsiElement import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.ConfigurationDirectives -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.assertions -abstract class AbstractNonLocalDeclarationAnchorTest : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { +abstract class AbstractNonLocalDeclarationAnchorTest : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { val anchors = hashSetOf() - ktFile.forEachDescendantOfType { + mainFile.forEachDescendantOfType { it.getNonLocalContainingOrThisDeclaration()?.let(anchors::add) } val text = buildString { - ktFile.accept(object : PsiElementVisitor() { + mainFile.accept(object : PsiElementVisitor() { override fun visitElement(element: PsiElement) { val isAnchor = element in anchors if (isAnchor) { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractPartialRawFirBuilderTestCase.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractPartialRawFirBuilderTestCase.kt index 36a9a4bba7c..5f8e14cb9dd 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractPartialRawFirBuilderTestCase.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractPartialRawFirBuilderTestCase.kt @@ -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. */ @@ -8,9 +8,9 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir import junit.framework.TestCase import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirNonLocalDeclarationBuilder -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder @@ -27,21 +27,21 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.test.InTextDirectivesUtils +import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.JUnit5Assertions -import org.jetbrains.kotlin.test.services.TestModuleStructure import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.assertions import kotlin.io.path.readText -abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { +abstract class AbstractPartialRawFirBuilderTestCase : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { val fileText = testDataPath.readText() val functionName = InTextDirectivesUtils.findStringWithPrefixes(fileText, FUNCTION_DIRECTIVE) val propertyName = InTextDirectivesUtils.findStringWithPrefixes(fileText, PROPERTY_DIRECTIVE) when { - functionName != null -> testFunctionPartialBuilding(ktFile, functionName) - propertyName != null -> testPropertyPartialBuilding(ktFile, propertyName) + functionName != null -> testFunctionPartialBuilding(mainFile, functionName) + propertyName != null -> testPropertyPartialBuilding(mainFile, propertyName) else -> testServices.assertions.fail { "No '$FUNCTION_DIRECTIVE' or '$PROPERTY_DIRECTIVE' directives found!" } } } @@ -91,7 +91,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF private fun testPartialBuilding( file: KtFile, - findPsiElement: (KtFile) -> T + findPsiElement: (KtFile) -> T, ) { val elementToBuild = findPsiElement(file) as KtDeclaration diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractStdLibBasedGetOrBuildFirTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractStdLibBasedGetOrBuildFirTest.kt index 6bbab976ff2..4a8d6f52fc9 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractStdLibBasedGetOrBuildFirTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractStdLibBasedGetOrBuildFirTest.kt @@ -1,30 +1,30 @@ /* - * 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. */ package org.jetbrains.kotlin.analysis.low.level.api.fir import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider +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.utils.unwrapMultiReferences import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.psi.* -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.assertions -abstract class AbstractStdLibBasedGetOrBuildFirTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractStdLibBasedGetOrBuildFirTest : AbstractAnalysisApiBasedTest() { override val configurator = AnalysisApiFirSourceTestConfigurator(analyseInDependentSession = false) - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - val project = ktFile.project + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + val project = mainFile.project assert(!project.isDisposed) { "$project is disposed" } - val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(ktFile) - val ktReferences = ktFile.findReferenceAt(caretPosition)?.unwrapMultiReferences().orEmpty().filterIsInstance() + val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainFile) + val ktReferences = mainFile.findReferenceAt(caretPosition)?.unwrapMultiReferences().orEmpty().filterIsInstance() if (ktReferences.size != 1) { testServices.assertions.fail { "No references at caret found" } } @@ -33,7 +33,7 @@ abstract class AbstractStdLibBasedGetOrBuildFirTest : AbstractLowLevelApiSingleF ktReferences.first().resolveToSymbol()?.psi as KtDeclaration } - val module = ProjectStructureProvider.getModule(project, ktFile, contextualModule = null) + val module = ProjectStructureProvider.getModule(project, mainFile, contextualModule = null) val resolveSession = LLFirResolveSessionService.getInstance(project).getFirResolveSession(module) val fir = declaration.resolveToFirSymbol(resolveSession).fir testServices.assertions.assertEqualsToTestDataFileSibling(renderActualFir(fir, declaration)) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractDiagnosticTraversalCounterTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractDiagnosticTraversalCounterTest.kt index 116f386b791..54d3dffe149 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractDiagnosticTraversalCounterTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractDiagnosticTraversalCounterTest.kt @@ -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. */ @@ -18,10 +18,10 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.resolveWithClearCaches import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.useFirSessionConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.SessionConfiguration import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor @@ -33,14 +33,14 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder -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.assertions /** * Check that every declaration is visited exactly one time during diagnostic collection */ -abstract class AbstractDiagnosticTraversalCounterTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractDiagnosticTraversalCounterTest : AbstractAnalysisApiBasedTest() { override fun configureTest(builder: TestConfigurationBuilder) { super.configureTest(builder) builder.apply { @@ -48,12 +48,12 @@ abstract class AbstractDiagnosticTraversalCounterTest : AbstractLowLevelApiSingl } } - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - resolveWithClearCaches(ktFile) { firResolveSession -> + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + resolveWithClearCaches(mainFile) { firResolveSession -> // we should get diagnostics before we resolve the whole file by ktFile.getOrBuildFir - ktFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) + mainFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) - val firFile = ktFile.getOrBuildFirOfType(firResolveSession) + val firFile = mainFile.getOrBuildFirOfType(firResolveSession) val errorElements = collectErrorElements(firFile) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractFirContextCollectionTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractFirContextCollectionTest.kt index b1d928df64a..484d2acc6e9 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractFirContextCollectionTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/AbstractFirContextCollectionTest.kt @@ -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. */ @@ -19,11 +19,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.resolveWithClearCaches import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.useFirSessionConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.SessionConfiguration import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.declarations.FirDeclaration @@ -32,9 +32,10 @@ import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.* -abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractFirContextCollectionTest : AbstractAnalysisApiBasedTest() { override fun configureTest(builder: TestConfigurationBuilder) { super.configureTest(builder) builder.apply { @@ -42,23 +43,23 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT } } - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - resolveWithClearCaches(ktFile) { firResolveSession -> + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + resolveWithClearCaches(mainFile) { firResolveSession -> check(firResolveSession.isSourceSession) - val module = firResolveSession.getModule(ktFile) + val module = firResolveSession.getModule(mainFile) val session = firResolveSession.getSessionFor(module) as LLFirResolvableModuleSession val handler = session.beforeElementDiagnosticCollectionHandler as BeforeElementTestDiagnosticCollectionHandler val fileStructureCache = session.moduleComponents.fileStructureCache - val fileStructure = fileStructureCache.getFileStructure(ktFile) + val fileStructure = fileStructureCache.getFileStructure(mainFile) val allStructureElements = fileStructure.getAllStructureElements() handler.elementsToCheckContext = allStructureElements.map(FileStructureElement::firDeclaration) - handler.firFile = ktFile.getOrBuildFirFile(firResolveSession) + handler.firFile = mainFile.getOrBuildFirFile(firResolveSession) - ktFile.getDiagnostics(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) + mainFile.getDiagnostics(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) } } @@ -71,7 +72,7 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT } private class BeforeElementTestDiagnosticCollectionHandler( - private val assertions: AssertionsService + private val assertions: AssertionsService, ) : BeforeElementDiagnosticCollectionHandler() { lateinit var elementsToCheckContext: List lateinit var firFile: FirFile diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDanglingFileInBlockModificationTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDanglingFileInBlockModificationTest.kt index db6f5c819be..1defa4ff3a0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDanglingFileInBlockModificationTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDanglingFileInBlockModificationTest.kt @@ -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. */ @@ -12,19 +12,19 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.Analys import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory -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.moduleStructure abstract class AbstractDanglingFileInBlockModificationTes : AbstractInBlockModificationTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - val selectedElement = testServices.expressionMarkerProvider - .getSelectedElementOfTypeByDirective(ktFile, moduleStructure.modules.single()) + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + val selectedElement = testServices.expressionMarkerProvider.getSelectedElementOfTypeByDirective(mainFile, mainModule) - val ktPsiFactory = KtPsiFactory.contextual(ktFile, markGenerated = true, eventSystemEnabled = true) - val fakeKtFile = ktPsiFactory.createFile(ktFile.name, ktFile.text) + val ktPsiFactory = KtPsiFactory.contextual(mainFile, markGenerated = true, eventSystemEnabled = true) + val fakeKtFile = ktPsiFactory.createFile(mainFile.name, mainFile.text) val fakeSelectedElement = PsiTreeUtil.findSameElementInCopy(selectedElement, fakeKtFile) - doTest(fakeKtFile, fakeSelectedElement, moduleStructure, testServices) + doTest(fakeKtFile, fakeSelectedElement, testServices.moduleStructure, testServices) } } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDeclarationModificationServicePsiResilienceTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDeclarationModificationServicePsiResilienceTest.kt index 60b3d2c18ac..d6be135495c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDeclarationModificationServicePsiResilienceTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractDeclarationModificationServicePsiResilienceTest.kt @@ -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. */ diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt index bc0d7339b19..045265f6cad 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractFileStructureTest.kt @@ -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. */ @@ -14,26 +14,26 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.isSourceSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirResolvableModuleSession -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType import org.jetbrains.kotlin.test.KotlinTestUtils -import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices -abstract class AbstractFileStructureTest : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - val fileStructure = ktFile.getFileStructure() - val allStructureElements = fileStructure.getAllStructureElements(ktFile) +abstract class AbstractFileStructureTest : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + val fileStructure = mainFile.getFileStructure() + val allStructureElements = fileStructure.getAllStructureElements(mainFile) val declarationToStructureElement = allStructureElements.associateBy { it.firDeclaration.psi } val elementToComment = mutableMapOf() - ktFile.forEachDescendantOfType { ktDeclaration -> + mainFile.forEachDescendantOfType { ktDeclaration -> val structureElement = declarationToStructureElement[ktDeclaration] ?: return@forEachDescendantOfType val comment = structureElement.createComment() when (ktDeclaration) { @@ -69,13 +69,13 @@ abstract class AbstractFileStructureTest : AbstractLowLevelApiSingleFileTest() { elementToComment[ktDeclaration.openBraceNode!!] = comment } is KtScript -> { - elementToComment[ktFile.importList!!] = comment + elementToComment[mainFile.importList!!] = comment } else -> error("Unsupported declaration $ktDeclaration") } } - PsiTreeUtil.getChildrenOfTypeAsList(ktFile, KtModifierList::class.java).forEach { + PsiTreeUtil.getChildrenOfTypeAsList(mainFile, KtModifierList::class.java).forEach { if (it.nextSibling is PsiErrorElement) { val structureElement = declarationToStructureElement[it] ?: return@forEach val comment = structureElement.createComment() @@ -84,7 +84,7 @@ abstract class AbstractFileStructureTest : AbstractLowLevelApiSingleFileTest() { } val text = buildString { - ktFile.accept(object : PsiElementVisitor() { + mainFile.accept(object : PsiElementVisitor() { override fun visitElement(element: PsiElement) { if (element is LeafPsiElement) { append(element.text) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt index 9a485962c5b..2a3dae5935d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/AbstractInBlockModificationTest.kt @@ -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. */ @@ -14,13 +14,13 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.lazyResolveRenderer import org.jetbrains.kotlin.analysis.low.level.api.fir.resolveWithCaches -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator import org.jetbrains.kotlin.analysis.providers.analysisMessageBus import org.jetbrains.kotlin.analysis.providers.topics.KotlinModuleOutOfBlockModificationListener import org.jetbrains.kotlin.analysis.providers.topics.KotlinTopics +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor @@ -31,23 +31,25 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer +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.assertions +import org.jetbrains.kotlin.test.services.moduleStructure -abstract class AbstractInBlockModificationTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractInBlockModificationTest : AbstractAnalysisApiBasedTest() { override fun configureTest(builder: TestConfigurationBuilder) { super.configureTest(builder) builder.useDirectives(Directives) } - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { val selectedElement = testServices.expressionMarkerProvider.getSelectedElementOfTypeByDirective( - ktFile = ktFile, - module = moduleStructure.modules.last(), + ktFile = mainFile, + module = mainModule, ) - doTest(ktFile, selectedElement, moduleStructure, testServices) + doTest(mainFile, selectedElement, testServices.moduleStructure, testServices) } protected fun doTest(ktFile: KtFile, selectedElement: PsiElement, moduleStructure: TestModuleStructure, testServices: TestServices) { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractErrorResistanceTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractErrorResistanceTest.kt index f234056605d..13ff9d9d8a7 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractErrorResistanceTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractErrorResistanceTest.kt @@ -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. */ @@ -18,25 +18,25 @@ import com.intellij.psi.search.PsiSearchScopeUtil import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile import org.jetbrains.kotlin.analysis.low.level.api.fir.resolveWithClearCaches -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.TestInfrastructureInternals import org.jetbrains.kotlin.test.impl.testConfiguration -import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices import kotlin.test.fail -abstract class AbstractErrorResistanceTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractErrorResistanceTest : AbstractAnalysisApiBasedTest() { override val configurator: AnalysisApiFirSourceTestConfigurator = ErrorResistanceConfigurator - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - resolveWithClearCaches(ktFile) { firResolveSession -> + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + resolveWithClearCaches(mainFile) { firResolveSession -> ENABLE_INTERRUPTION.set(true) try { - ktFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) + mainFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) fail("Analysis should be interrupted") } catch (e: Throwable) { val errors = generateSequence(e) { it.cause } @@ -47,7 +47,7 @@ abstract class AbstractErrorResistanceTest : AbstractLowLevelApiSingleFileTest() ENABLE_INTERRUPTION.set(false) - val diagnostics = ktFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) + val diagnostics = mainFile.collectDiagnosticsForFile(firResolveSession, DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS) assert(diagnostics.isEmpty()) { val messages = diagnostics.map { it.factoryName } "There should be no diagnostics, found:\n" + messages.joinToString("\n") @@ -117,7 +117,7 @@ private class BrokenPackage(packageName: String, manager: PsiManager) : PsiPacka private class BrokenClass( private val packageName: String, name: String, - manager: PsiManager + manager: PsiManager, ) : LightPsiClassBase(manager, JavaLanguage.INSTANCE, name) { private val modifierList: PsiModifierList = LightModifierList(manager, JavaLanguage.INSTANCE, PsiModifier.PUBLIC) private val methods: Array = arrayOf(ConstructorMethod(this), GetterMethod(this)) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractWholeFileResolvePhaseTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractWholeFileResolvePhaseTest.kt index 231dd081f15..fd0a55ea843 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractWholeFileResolvePhaseTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/resolve/AbstractWholeFileResolvePhaseTest.kt @@ -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. */ @@ -7,21 +7,21 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.resolve import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirOfType import org.jetbrains.kotlin.analysis.low.level.api.fir.resolveWithClearCaches -import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirOutOfContentRootTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirScriptTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.renderer.FirRenderer 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.assertions -abstract class AbstractWholeFileResolvePhaseTest : AbstractLowLevelApiSingleFileTest() { - override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { - resolveWithClearCaches(ktFile) { firResolveSession -> - val firFile = ktFile.getOrBuildFirOfType(firResolveSession) +abstract class AbstractWholeFileResolvePhaseTest : AbstractAnalysisApiBasedTest() { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { + resolveWithClearCaches(mainFile) { firResolveSession -> + val firFile = mainFile.getOrBuildFirOfType(firResolveSession) val actual = FirRenderer.withResolvePhase().renderElementAsString(firFile) testServices.assertions.assertEqualsToTestDataFileSibling(actual, extension = ".lazy.resolve.txt") } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiModifiablePsiSingleFileTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiModifiablePsiSingleFileTest.kt index 0581b1685c0..fb0677c085d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiModifiablePsiSingleFileTest.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiModifiablePsiSingleFileTest.kt @@ -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. */ @@ -8,11 +8,14 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base import com.intellij.openapi.command.CommandProcessor import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiModifiablePsiTestServiceRegistrar import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirSourceTestConfigurator +import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar import org.jetbrains.kotlin.psi.KtFile +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.moduleStructure import org.jetbrains.kotlin.test.testFramework.runWriteAction /** @@ -20,15 +23,15 @@ import org.jetbrains.kotlin.test.testFramework.runWriteAction * * NOTE: Modifiable PSI tests must not be used until KT-63650 is fixed. */ -abstract class AbstractLowLevelApiModifiablePsiSingleFileTest : AbstractLowLevelApiSingleFileTest() { +abstract class AbstractLowLevelApiModifiablePsiSingleFileTest : AbstractAnalysisApiBasedTest() { override val configurator: AnalysisApiTestConfigurator get() = AnalysisApiFirModifiablePsiSourceTestConfigurator abstract fun doTestWithPsiModification(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) - final override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { + override fun doTestByMainFile(mainFile: KtFile, mainModule: TestModule, testServices: TestServices) { CommandProcessor.getInstance().runUndoTransparentAction { runWriteAction { - doTestWithPsiModification(ktFile, moduleStructure, testServices) + doTestWithPsiModification(mainFile, testServices.moduleStructure, testServices) } } } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiSingleFileTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiSingleFileTest.kt deleted file mode 100644 index c9692c4feb4..00000000000 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AbstractLowLevelApiSingleFileTest.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2010-2023 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. - */ - -package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base - -import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest -import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.test.services.TestModuleStructure -import org.jetbrains.kotlin.test.services.TestServices - -abstract class AbstractLowLevelApiSingleFileTest : AbstractAnalysisApiBasedTest() { - final override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) { - val singleModule = moduleStructure.modules.single() - val singleFile = testServices.ktModuleProvider.getModuleFiles(singleModule).filterIsInstance().single() - doTestByFileStructure(singleFile, moduleStructure, testServices) - } - - abstract fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) -} \ No newline at end of file