[AA] Tests: Remove decompiled files from LibraryBinary and add LibraryBinaryDecompiled

- `LibraryBinary` should not contain any decompiled files, as we want
  FIR symbols in tests to be provided from indexed stubs or class files,
  but definitely not from decompiled PSI. This brings `LibraryBinary`
  much closer to the behavior of binary libraries in the IDE.
- Some tests may still require access to a decompiled file, for example
  when trying to test `getOrBuildFir` for some `KtElement` coming from a
  library. This commit introduces `LibraryBinaryDecompiled`, which
  does contain decompiled files.
- We don't really need `LibraryBinary` as a main test module kind
  anymore, since tests generally want to access some main `KtFile`.
  Hence, test configurators for `LibraryBinary` have been turned into
  configurators for `LibraryBinaryDecompiled`.
- An alternative would be decompiling files on demand, but this is not
  currently feasible because the Standalone API doesn't reconcile stubs
  with decompiled PSI, like the IDE does automatically. (For the same
  declaration, the stub and the PSI will have a different identity.) As
  long as there is no support for this, we'll have to rely on a separate
  test module kind.

^KT-65960
This commit is contained in:
Marco Pennekamp
2024-02-20 22:41:10 +01:00
committed by Space Team
parent 7baaa38b8a
commit 78ef58bef4
21 changed files with 126 additions and 180 deletions
@@ -3,16 +3,6 @@ TARGET: public open [<synthetic> STATUS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(STATUS)] set([ResolvedTo(STATUS)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -28,16 +18,6 @@ TARGET: public open [<synthetic> EXPECT_ACTUAL_MATCHING] var something: R|kotlin
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(EXPECT_ACTUAL_MATCHING)] set([ResolvedTo(EXPECT_ACTUAL_MATCHING)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -54,16 +34,6 @@ TARGET: public open [<synthetic> CONTRACTS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(CONTRACTS)] set([ResolvedTo(CONTRACTS)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -81,16 +51,6 @@ TARGET: public open [<synthetic> IMPLICIT_TYPES_BODY_RESOLVE] var something: R|k
public [<synthetic> ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] set([ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -108,16 +68,6 @@ TARGET: public open [<synthetic> ANNOTATION_ARGUMENTS] var something: R|kotlin/S
public [<synthetic> ResolvedTo(ANNOTATION_ARGUMENTS)] set([ResolvedTo(ANNOTATION_ARGUMENTS)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -135,16 +85,6 @@ TARGET: public open [<synthetic> BODY_RESOLVE] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -3,16 +3,6 @@ TARGET: public open override [<synthetic> STATUS] var something: R|kotlin/String
public [<synthetic> ResolvedTo(STATUS)] get(): R|kotlin/String| { LAZY_BLOCK }
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -28,16 +18,6 @@ TARGET: public open override [<synthetic> EXPECT_ACTUAL_MATCHING] var something:
public [<synthetic> ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): R|kotlin/String| { LAZY_BLOCK }
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -55,16 +35,6 @@ TARGET: public open override [<synthetic> CONTRACTS] var something: R|kotlin/Str
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -84,16 +54,6 @@ TARGET: public open override [<synthetic> IMPLICIT_TYPES_BODY_RESOLVE] var somet
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -113,16 +73,6 @@ TARGET: public open override [<synthetic> ANNOTATION_ARGUMENTS] var something: R
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -142,16 +92,6 @@ TARGET: public open override [<synthetic> BODY_RESOLVE] var something: R|kotlin/
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirLibraryBinaryTestConfigurator
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.configurators.AnalysisApiFirLibraryBinaryDecompiledTestConfigurator
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirDeclarationForCompiledElementSearcher
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest
@@ -24,7 +24,8 @@ import org.jetbrains.kotlin.test.services.moduleStructure
import org.jetbrains.kotlin.test.services.service
abstract class AbstractLibraryGetOrBuildFirTest : AbstractAnalysisApiBasedTest() {
override val configurator = AnalysisApiFirLibraryBinaryTestConfigurator
override val configurator get() = AnalysisApiFirLibraryBinaryDecompiledTestConfigurator
override fun configureTest(builder: TestConfigurationBuilder) {
builder.forTestsMatching("analysis/low-level-api-fir/testData/getOrBuildFirBinary/js/*") {
this.defaultsProviderBuilder.targetPlatform = JsPlatforms.defaultJsPlatform
@@ -27,7 +27,7 @@ class AnalysisApiFirCodeFragmentTestConfigurator(
useModuleStructureTransformers(DependencyKindModuleStructureTransformer)
}
AnalysisApiFirLibraryBinaryTestConfigurator.configureLibraryCompilationSupport(builder)
AnalysisApiFirLibraryBinaryDecompiledTestConfigurator.configureLibraryCompilationSupport(builder)
}
override val serviceRegistrars: List<AnalysisApiTestServiceRegistrar>
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisAp
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiLibraryBaseTestServiceRegistrar
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AnalysisApiFirTestServiceRegistrar
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.configureOptionalTestCompilerPlugin
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryBinaryModuleFactory
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryBinaryDecompiledModuleFactory
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtTestModuleProjectStructure
import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory
@@ -29,13 +29,13 @@ import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
import org.jetbrains.kotlin.test.services.configuration.JsEnvironmentConfigurator
object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator() {
object AnalysisApiFirLibraryBinaryDecompiledTestConfigurator : AnalysisApiTestConfigurator() {
override val analyseInDependentSession: Boolean get() = false
override val frontendKind: FrontendKind get() = FrontendKind.Fir
override fun configureTest(builder: TestConfigurationBuilder, disposable: Disposable) {
builder.apply {
useAdditionalService<KtModuleFactory> { KtLibraryBinaryModuleFactory }
useAdditionalService<KtModuleFactory> { KtLibraryBinaryDecompiledModuleFactory }
useAdditionalService { AnalysisApiIndexingConfiguration(AnalysisApiBinaryLibraryIndexingMode.INDEX_STUBS) }
configureLibraryCompilationSupport(this)
configureOptionalTestCompilerPlugin()
@@ -27,7 +27,7 @@ open class AnalysisApiFirSourceTestConfigurator(
useModuleStructureTransformers(DependencyKindModuleStructureTransformer)
}
AnalysisApiFirLibraryBinaryTestConfigurator.configureLibraryCompilationSupport(builder)
AnalysisApiFirLibraryBinaryDecompiledTestConfigurator.configureLibraryCompilationSupport(builder)
}
override val serviceRegistrars: List<AnalysisApiTestServiceRegistrar>