[LL FIR] introduce test with reversed resolve order

^KT-56543

Merge-request: KT-MR-9299
Merged-by: Dmitrii Gridin <dmitry.gridin@jetbrains.com>
This commit is contained in:
Dmitrii Gridin
2023-03-22 17:34:07 +00:00
committed by Space Team
parent 8528519d96
commit 9a4a3d1f49
413 changed files with 55387 additions and 45 deletions
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -9,8 +9,8 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.FirLowLevelCompilerBasedTestConfigurator import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.FirLowLevelCompilerBasedTestConfigurator
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformer
import org.jetbrains.kotlin.analysis.test.framework.AbstractCompilerBasedTest import org.jetbrains.kotlin.analysis.test.framework.AbstractCompilerBasedTest
import org.jetbrains.kotlin.analysis.test.framework.base.registerAnalysisApiBaseTestServices import org.jetbrains.kotlin.analysis.test.framework.base.registerAnalysisApiBaseTestServices
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleByCompilerConfiguration import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtSourceModuleByCompilerConfiguration
@@ -31,7 +31,9 @@ import org.jetbrains.kotlin.test.frontend.fir.FirOutputPartForDependsOnModule
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.ServiceRegistrationData
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.isKtFile
abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() { abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
final override fun TestConfigurationBuilder.configuration() { final override fun TestConfigurationBuilder.configuration() {
@@ -63,7 +65,8 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
open fun TestConfigurationBuilder.configureTest() {} open fun TestConfigurationBuilder.configureTest() {}
inner class LowLevelFirFrontendFacade( inner class LowLevelFirFrontendFacade(
testServices: TestServices testServices: TestServices,
private val facadeFactory: LLFirAnalyzerFacadeFactory,
) : FirFrontendFacade(testServices) { ) : FirFrontendFacade(testServices) {
override val additionalServices: List<ServiceRegistrationData> override val additionalServices: List<ServiceRegistrationData>
get() = emptyList() get() = emptyList()
@@ -99,7 +102,7 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS DiagnosticCheckerFilter.EXTENDED_AND_COMMON_CHECKERS
} else DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS } else DiagnosticCheckerFilter.ONLY_COMMON_CHECKERS
val analyzerFacade = LowLevelFirAnalyzerFacade(firResolveSession, allFirFiles.toMap(), diagnosticCheckerFilter) val analyzerFacade = facadeFactory.createFirFacade(firResolveSession, allFirFiles.toMap(), diagnosticCheckerFilter)
return FirOutputPartForDependsOnModule( return FirOutputPartForDependsOnModule(
module, module,
firResolveSession.useSiteFirSession, firResolveSession.useSiteFirSession,
@@ -115,12 +118,7 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() {
if (ignoreTest(filePath, configuration)) { if (ignoreTest(filePath, configuration)) {
return return
} }
val oldEnableDeepEnsure = LLFirLazyTransformer.needCheckingIfClassMembersAreResolved
try { super.runTest(filePath)
LLFirLazyTransformer.needCheckingIfClassMembersAreResolved = true
super.runTest(filePath)
} finally {
LLFirLazyTransformer.needCheckingIfClassMembersAreResolved = oldEnableDeepEnsure
}
} }
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -10,14 +10,17 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile
import org.jetbrains.kotlin.diagnostics.KtDiagnostic import org.jetbrains.kotlin.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.fir.AbstractFirAnalyzerFacade import org.jetbrains.kotlin.fir.AbstractFirAnalyzerFacade
import org.jetbrains.kotlin.fir.backend.* import org.jetbrains.kotlin.fir.backend.Fir2IrCommonMemberStorage
import org.jetbrains.kotlin.fir.backend.Fir2IrExtensions
import org.jetbrains.kotlin.fir.backend.Fir2IrResult
import org.jetbrains.kotlin.fir.backend.IrBuiltInsOverFir
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.model.TestFile import org.jetbrains.kotlin.test.model.TestFile
class LowLevelFirAnalyzerFacade( open class LowLevelFirAnalyzerFacade(
val firResolveSession: LLFirResolveSession, val firResolveSession: LLFirResolveSession,
val allFirFiles: Map<TestFile, FirFile>, val allFirFiles: Map<TestFile, FirFile>,
private val diagnosticCheckerFilter: DiagnosticCheckerFilter, private val diagnosticCheckerFilter: DiagnosticCheckerFilter,
@@ -25,7 +28,14 @@ class LowLevelFirAnalyzerFacade(
override val scopeSession: ScopeSession override val scopeSession: ScopeSession
get() = ScopeSession() get() = ScopeSession()
private var resolved: Boolean = false
override fun runCheckers(): Map<FirFile, List<KtDiagnostic>> { override fun runCheckers(): Map<FirFile, List<KtDiagnostic>> {
if (!resolved) {
runResolution()
resolved = true
}
return allFirFiles.values.associateWith { firFile -> return allFirFiles.values.associateWith { firFile ->
val ktFile = firFile.psi as KtFile val ktFile = firFile.psi as KtFile
val diagnostics = ktFile.collectDiagnosticsForFile(firResolveSession, diagnosticCheckerFilter) val diagnostics = ktFile.collectDiagnosticsForFile(firResolveSession, diagnosticCheckerFilter)
@@ -34,7 +44,8 @@ class LowLevelFirAnalyzerFacade(
} }
} }
override fun runResolution(): List<FirFile> = shouldNotBeCalled() override fun runResolution(): List<FirFile> = allFirFiles.values.toList()
override fun convertToIr( override fun convertToIr(
fir2IrExtensions: Fir2IrExtensions, fir2IrExtensions: Fir2IrExtensions,
commonMemberStorage: Fir2IrCommonMemberStorage, commonMemberStorage: Fir2IrCommonMemberStorage,
@@ -1,16 +1,18 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * 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.diagnostic.compiler.based package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCompilerBasedTestForFir import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCompilerBasedTestForFir
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactoryWithoutPreresolve
import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
abstract class AbstractDiagnosisCompilerTestDataTest : AbstractCompilerBasedTestForFir() { abstract class AbstractDiagnosticCompilerTestDataTest : AbstractCompilerBasedTestForFir() {
override fun TestConfigurationBuilder.configureTest() { override fun TestConfigurationBuilder.configureTest() {
baseFirDiagnosticTestConfiguration(frontendFacade = ::LowLevelFirFrontendFacade) baseFirDiagnosticTestConfiguration(frontendFacade = ::LowLevelFirFrontendFacade.bind(LLFirAnalyzerFacadeFactoryWithoutPreresolve))
} }
} }
@@ -1,18 +1,24 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * 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.diagnostic.compiler.based package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCompilerBasedTestForFir import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCompilerBasedTestForFir
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactoryWithoutPreresolve
import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
import org.jetbrains.kotlin.test.runners.baseFirSpecDiagnosticTestConfiguration import org.jetbrains.kotlin.test.runners.baseFirSpecDiagnosticTestConfiguration
abstract class AbstractLLFirDiagnosisCompilerTestDataSpecTest : AbstractCompilerBasedTestForFir() { abstract class AbstractLLFirDiagnosticCompilerTestDataSpecTest : AbstractCompilerBasedTestForFir() {
override fun TestConfigurationBuilder.configureTest() { override fun TestConfigurationBuilder.configureTest() {
baseFirDiagnosticTestConfiguration(frontendFacade = ::LowLevelFirFrontendFacade) baseFirDiagnosticTestConfiguration(frontendFacade = ::LowLevelFirFrontendFacade.bind(LLFirAnalyzerFacadeFactoryWithoutPreresolve))
baseFirSpecDiagnosticTestConfiguration() baseFirSpecDiagnosticTestConfigurationForIde()
} }
} }
fun TestConfigurationBuilder.baseFirSpecDiagnosticTestConfigurationForIde() {
baseFirSpecDiagnosticTestConfiguration()
}
@@ -0,0 +1,22 @@
/*
* 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.diagnostic.compiler.based
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCompilerBasedTestForFir
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactoryWithPreresolveInReversedOrder
import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
abstract class AbstractLLFirPreresolvedReversedDiagnosticCompilerTestDataSpecTest : AbstractCompilerBasedTestForFir() {
override fun TestConfigurationBuilder.configureTest() {
baseFirDiagnosticTestConfiguration(
frontendFacade = ::LowLevelFirFrontendFacade.bind(LLFirAnalyzerFacadeFactoryWithPreresolveInReversedOrder)
)
baseFirSpecDiagnosticTestConfigurationForIde()
useAfterAnalysisCheckers(::FirReversedSuppressor)
}
}
@@ -0,0 +1,54 @@
/*
* 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.diagnostic.compiler.based
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCompilerBasedTestForFir
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactoryWithPreresolveInReversedOrder
import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.WrappedException
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.services.moduleStructure
abstract class AbstractLLFirPreresolvedReversedDiagnosticCompilerTestDataTest : AbstractCompilerBasedTestForFir() {
override fun TestConfigurationBuilder.configureTest() {
baseFirDiagnosticTestConfiguration(
frontendFacade = ::LowLevelFirFrontendFacade.bind(LLFirAnalyzerFacadeFactoryWithPreresolveInReversedOrder)
)
useAfterAnalysisCheckers(::FirReversedSuppressor)
}
}
internal class FirReversedSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
override val directiveContainers: List<DirectivesContainer> get() = listOf(Companion)
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
if (!isDisabled()) {
return failedAssertions
}
return if (failedAssertions.isEmpty()) {
listOf(
AssertionError(
"Test contains $IGNORE_REVERSED_RESOLVE directive but no errors was reported. Please remove directive",
).wrap()
)
} else {
emptyList()
}
}
private fun isDisabled(): Boolean = IGNORE_REVERSED_RESOLVE in testServices.moduleStructure.allDirectives
companion object : SimpleDirectivesContainer() {
val IGNORE_REVERSED_RESOLVE by directive("Temporary disables reversed resolve checks until the issue is fixed")
}
}
@@ -17,7 +17,7 @@ import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ /** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all") @SuppressWarnings("all")
public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiagnosisCompilerTestDataTest { public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDiagnosticCompilerTestDataTest {
@Nested @Nested
@TestMetadata("compiler/testData/diagnostics/tests") @TestMetadata("compiler/testData/diagnostics/tests")
@TestDataPath("$PROJECT_ROOT") @TestDataPath("$PROJECT_ROOT")
@@ -16,7 +16,7 @@ import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ /** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all") @SuppressWarnings("all")
public class DiagnosisCompilerTestFirTestdataTestGenerated extends AbstractDiagnosisCompilerTestDataTest { public class DiagnosticCompilerTestFirTestdataTestGenerated extends AbstractDiagnosticCompilerTestDataTest {
@Nested @Nested
@TestMetadata("compiler/fir/analysis-tests/testData/resolve") @TestMetadata("compiler/fir/analysis-tests/testData/resolve")
@TestDataPath("$PROJECT_ROOT") @TestDataPath("$PROJECT_ROOT")
@@ -18,7 +18,7 @@ import java.util.regex.Pattern;
@SuppressWarnings("all") @SuppressWarnings("all")
@TestMetadata("compiler/tests-spec/testData/diagnostics") @TestMetadata("compiler/tests-spec/testData/diagnostics")
@TestDataPath("$PROJECT_ROOT") @TestDataPath("$PROJECT_ROOT")
public class FirIdeSpecTestGenerated extends AbstractLLFirDiagnosisCompilerTestDataSpecTest { public class FirIdeSpecTestGenerated extends AbstractLLFirDiagnosticCompilerTestDataSpecTest {
@Test @Test
public void testAllFilesPresentInDiagnostics() throws Exception { public void testAllFilesPresentInDiagnostics() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/tests-spec/testData/diagnostics"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "helpers", "linked/annotations", "linked/built-in-types-and-their-semantics", "linked/control--and-data-flow-analysis.control-flow-graph.expressions-1.conditional-expressions", "linked/control--and-data-flow-analysis/performing-analysis-on-the-control-flow-graph", "linked/declarations/classifier-declaration/class-declaration/nested-and-inner-classifiers", "linked/declarations/classifier-declaration/classifier-initialization", "linked/declarations/classifier-declaration/data-class-declaration", "linked/declarations/function-declaration", "linked/declarations/property-declaration/property-initialization", "linked/declarations/type-alias", "linked/expressions/call-and-property-access-expressions", "linked/expressions/function-literals", "linked/inheritance", "linked/overload-resolution/c-level-partition", "linked/overload-resolution/determining-function-applicability-for-a-specific-call/rationale", "linked/overloadable-operators", "linked/statements/assignments/simple-assignments", "linked/type-inference/local-type-inference", "linked/type-inference/smart-casts/smart-cast-types", "linked/type-system/subtyping/subtyping-for-nullable-types", "linked/type-system/type-kinds/type-parameters"); KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/tests-spec/testData/diagnostics"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "helpers", "linked/annotations", "linked/built-in-types-and-their-semantics", "linked/control--and-data-flow-analysis.control-flow-graph.expressions-1.conditional-expressions", "linked/control--and-data-flow-analysis/performing-analysis-on-the-control-flow-graph", "linked/declarations/classifier-declaration/class-declaration/nested-and-inner-classifiers", "linked/declarations/classifier-declaration/classifier-initialization", "linked/declarations/classifier-declaration/data-class-declaration", "linked/declarations/function-declaration", "linked/declarations/property-declaration/property-initialization", "linked/declarations/type-alias", "linked/expressions/call-and-property-access-expressions", "linked/expressions/function-literals", "linked/inheritance", "linked/overload-resolution/c-level-partition", "linked/overload-resolution/determining-function-applicability-for-a-specific-call/rationale", "linked/overloadable-operators", "linked/statements/assignments/simple-assignments", "linked/type-inference/local-type-inference", "linked/type-inference/smart-casts/smart-cast-types", "linked/type-system/subtyping/subtyping-for-nullable-types", "linked/type-system/type-kinds/type-parameters");
@@ -0,0 +1,20 @@
/*
* 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.diagnostic.compiler.based.facades
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.LowLevelFirAnalyzerFacade
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.test.model.TestFile
abstract class LLFirAnalyzerFacadeFactory {
abstract fun createFirFacade(
firResolveSession: LLFirResolveSession,
allFirFiles: Map<TestFile, FirFile>,
diagnosticCheckerFilter: DiagnosticCheckerFilter
): LowLevelFirAnalyzerFacade
}
@@ -0,0 +1,34 @@
/*
* 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.diagnostic.compiler.based.facades
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.LowLevelFirAnalyzerFacade
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.test.model.TestFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.getDeclarationsToResolve
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
object LLFirAnalyzerFacadeFactoryWithPreresolveInReversedOrder : LLFirAnalyzerFacadeFactory() {
override fun createFirFacade(
firResolveSession: LLFirResolveSession,
allFirFiles: Map<TestFile, FirFile>,
diagnosticCheckerFilter: DiagnosticCheckerFilter
): LowLevelFirAnalyzerFacade = object : LowLevelFirAnalyzerFacade(firResolveSession, allFirFiles, diagnosticCheckerFilter) {
override fun runResolution(): List<FirFile> {
val allDeclarations = allFirFiles.values.getDeclarationsToResolve().reversed()
for (declaration in allDeclarations) {
declaration.lazyResolveToPhase(FirResolvePhase.BODY_RESOLVE)
declaration.checkPhase(FirResolvePhase.BODY_RESOLVE)
}
return allFirFiles.values.toList()
}
}
}
@@ -0,0 +1,22 @@
/*
* 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.diagnostic.compiler.based.facades
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.LowLevelFirAnalyzerFacade
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.test.model.TestFile
object LLFirAnalyzerFacadeFactoryWithoutPreresolve : LLFirAnalyzerFacadeFactory() {
override fun createFirFacade(
firResolveSession: LLFirResolveSession,
allFirFiles: Map<TestFile, FirFile>,
diagnosticCheckerFilter: DiagnosticCheckerFilter
): LowLevelFirAnalyzerFacade {
return LowLevelFirAnalyzerFacade(firResolveSession, allFirFiles, diagnosticCheckerFilter)
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * 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. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -12,13 +12,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveS
import org.jetbrains.kotlin.analysis.project.structure.getKtModule import org.jetbrains.kotlin.analysis.project.structure.getKtModule
import org.jetbrains.kotlin.analysis.test.framework.services.environmentManager import org.jetbrains.kotlin.analysis.test.framework.services.environmentManager
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.services.PreAnalysisHandler import org.jetbrains.kotlin.test.services.PreAnalysisHandler
@@ -64,4 +62,24 @@ internal fun TestConfigurationBuilder.useFirSessionConfigurator(configurator: (T
} }
usePreAnalysisHandlers(::ConfiguratorPreAnalysisHandler) usePreAnalysisHandlers(::ConfiguratorPreAnalysisHandler)
} }
inline fun <reified E : FirElement> FirElement.collectAllElementsOfType(): List<E> {
val result = mutableListOf<E>()
this.accept(object : FirVisitorVoid() {
override fun visitElement(element: FirElement) {
if (element is E) result += element
element.acceptChildren(this)
}
})
return result
}
fun Collection<FirFile>.getDeclarationsToResolve() = flatMap { it.collectAllElementsOfType<FirDeclaration>() }.filterNot { declaration ->
declaration is FirFile ||
declaration is FirBackingField ||
declaration is FirAnonymousFunction ||
declaration is FirValueParameter && declaration.containingFunctionSymbol is FirAnonymousFunctionSymbol
}
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
import kotlin.reflect.KClass import kotlin.reflect.KClass
enum class SomeEnum { enum class SomeEnum {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// ISSUE: KT-55493 // ISSUE: KT-55493
// WITH_STDLIB // WITH_STDLIB
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// ISSUE: KT-55493 // ISSUE: KT-55493
// WITH_STDLIB // WITH_STDLIB
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// ISSUE: KT-56863 // ISSUE: KT-56863
interface I interface I
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
annotation class Ann annotation class Ann
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface AutoCloseable { interface AutoCloseable {
fun close() fun close()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
class Foo { class Foo {
init { init {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface B interface B
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface Out<out E> interface Out<out E>
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
abstract class A(func: () -> String) abstract class A(func: () -> String)
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
import kotlin.contracts.* import kotlin.contracts.*
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A interface A
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo(): A fun foo(): A
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
annotation class Ann1(vararg val a: String) annotation class Ann1(vararg val a: String)
annotation class Ann2(val a: IntArray) annotation class Ann2(val a: IntArray)
annotation class Ann3(val a: Array<String>) annotation class Ann3(val a: Array<String>)
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
import kotlin.reflect.KClass import kotlin.reflect.KClass
@Repeatable @Repeatable
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
annotation class A() { annotation class A() {
<!ANNOTATION_CLASS_MEMBER!><!PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED!>constructor(s: Nothing?)<!> {}<!> <!ANNOTATION_CLASS_MEMBER!><!PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED!>constructor(s: Nothing?)<!> {}<!>
<!ANNOTATION_CLASS_MEMBER!>init {}<!> <!ANNOTATION_CLASS_MEMBER!>init {}<!>
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
annotation class Ann(val a: Array<String>) annotation class Ann(val a: Array<String>)
val foo = "" val foo = ""
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
open class A { open class A {
open var test: Number = 10 open var test: Number = 10
} }
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
open <!REPEATED_MODIFIER!>open<!> class A open <!REPEATED_MODIFIER!>open<!> class A
internal <!REPEATED_MODIFIER!>internal<!> object B internal <!REPEATED_MODIFIER!>internal<!> object B
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
// ISSUE: KT-37091 // ISSUE: KT-37091
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
package org.jetbrains.kotlin.codegen.range.inExpression package org.jetbrains.kotlin.codegen.range.inExpression
interface ExpressionCodegen interface ExpressionCodegen
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
class NoPrimary { class NoPrimary {
val x: String val x: String
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !CHECK_TYPE // !CHECK_TYPE
// UNEXPECTED BEHAVIOUR // UNEXPECTED BEHAVIOUR
// ISSUES: KT-37066 // ISSUES: KT-37066
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// FILE: MagicConstant.java // FILE: MagicConstant.java
public @interface MagicConstant { public @interface MagicConstant {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
class B(p0: String) { class B(p0: String) {
val p1 = p0 val p1 = p0
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
interface FirElement { interface FirElement {
fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// FILE: A.kt // FILE: A.kt
open class A { open class A {
open fun getScope(): String? = null open fun getScope(): String? = null
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo(): Boolean fun foo(): Boolean
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
class A { class A {
val s: String = "" val s: String = ""
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
open class Base open class Base
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
fun test_0(x: Any) { fun test_0(x: Any) {
if (x is String) { if (x is String) {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// ISSUE: KT-39080 // ISSUE: KT-39080
// !DUMP_CFG // !DUMP_CFG
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo(): Boolean fun foo(): Boolean
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface A { interface A {
fun foo() fun foo()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
// There would be ambiguities if some expression was smartcasted to (A & B) and foo() was called. // There would be ambiguities if some expression was smartcasted to (A & B) and foo() was called.
// There was a bug where 2 variables were "bound" together if they are assigned from the same function call or property. // There was a bug where 2 variables were "bound" together if they are assigned from the same function call or property.
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
// CONTAINS ERRORS // CONTAINS ERRORS
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
class A { class A {
fun foo() {} fun foo() {}
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
// ----------------- Stable ----------------- // ----------------- Stable -----------------
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
fun String.foo(b: Boolean): String = "" fun String.foo(b: Boolean): String = ""
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
interface I interface I
interface S : I { interface S : I {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// ISSUE: KT-49747 // ISSUE: KT-49747
// DUMP_CFG // DUMP_CFG
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
fun getNothing(): Nothing = throw Exception() fun getNothing(): Nothing = throw Exception()
fun getNullableNothing(): Nothing? = null fun getNullableNothing(): Nothing? = null
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
open class A(open val x: Any) open class A(open val x: Any)
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
class A { class A {
fun foo() {} fun foo() {}
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
fun <T, R> use(x: (T) -> R): (T) -> R = x fun <T, R> use(x: (T) -> R): (T) -> R = x
fun foo() = use(::bar) fun foo() = use(::bar)
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DUMP_CFG // !DUMP_CFG
import kotlin.properties.ReadWriteProperty import kotlin.properties.ReadWriteProperty
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
class C(val map: MutableMap<String, Any>) { class C(val map: MutableMap<String, Any>) {
var foo by map var foo by map
} }
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// ISSUE: KT-39005 // ISSUE: KT-39005
// !DUMP_CFG // !DUMP_CFG
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// MODULE: lib // MODULE: lib
// FILE: A.kt // FILE: A.kt
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
val items: List<String> val items: List<String>
field = mutableListOf() field = mutableListOf()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
val list: List<String> val list: List<String>
field = mutableListOf<String>() field = mutableListOf<String>()
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
class A { class A {
val it: Number val it: Number
field = 4 field = 4
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
class Some(var foo: Int) { class Some(var foo: Int) {
init { init {
if (foo < 0) { if (foo < 0) {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
class TestInitValInLambdaCalledOnce { class TestInitValInLambdaCalledOnce {
val x: Int val x: Int
init { init {
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// FIR_IDENTICAL // FIR_IDENTICAL
// http://youtrack.jetbrains.net/issue/KT-419 // http://youtrack.jetbrains.net/issue/KT-419
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// FIR_IDENTICAL // FIR_IDENTICAL
interface NoC { interface NoC {
<!ANONYMOUS_INITIALIZER_IN_INTERFACE!>init<!> { <!ANONYMOUS_INITIALIZER_IN_INTERFACE!>init<!> {
+1
View File
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// FIR_IDENTICAL // FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER
// TODO Uncomment all the examples when there will be no problems with light classes // TODO Uncomment all the examples when there will be no problems with light classes
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
fun foo(a: (String) -> Unit) { fun foo(a: (String) -> Unit) {
"".<!UNRESOLVED_REFERENCE!>a<!>() "".<!UNRESOLVED_REFERENCE!>a<!>()
} }
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
fun foo(a: (String) -> Unit) { fun foo(a: (String) -> Unit) {
"".<!UNRESOLVED_REFERENCE!>a<!>() "".<!UNRESOLVED_REFERENCE!>a<!>()
} }
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DIAGNOSTICS: +UNUSED_PARAMETER // !DIAGNOSTICS: +UNUSED_PARAMETER
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DIAGNOSTICS: +UNUSED_PARAMETER // !DIAGNOSTICS: +UNUSED_PARAMETER
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DIAGNOSTICS: +UNUSED_VALUE, +UNUSED_CHANGED_VALUE, +UNUSED_PARAMETER, +UNUSED_VARIABLE // !DIAGNOSTICS: +UNUSED_VALUE, +UNUSED_CHANGED_VALUE, +UNUSED_PARAMETER, +UNUSED_VARIABLE
package unused_variables package unused_variables
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DIAGNOSTICS: +UNUSED_VALUE, +UNUSED_CHANGED_VALUE, +UNUSED_PARAMETER, +UNUSED_VARIABLE // !DIAGNOSTICS: +UNUSED_VALUE, +UNUSED_CHANGED_VALUE, +UNUSED_PARAMETER, +UNUSED_VARIABLE
package unused_variables package unused_variables
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: -ClassTypeParameterAnnotations // !LANGUAGE: -ClassTypeParameterAnnotations
@Target(AnnotationTarget.TYPE_PARAMETER) @Target(AnnotationTarget.TYPE_PARAMETER)
annotation class A1 annotation class A1
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: -ClassTypeParameterAnnotations // !LANGUAGE: -ClassTypeParameterAnnotations
@Target(AnnotationTarget.TYPE_PARAMETER) @Target(AnnotationTarget.TYPE_PARAMETER)
annotation class A1 annotation class A1
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: +ClassTypeParameterAnnotations // !LANGUAGE: +ClassTypeParameterAnnotations
annotation class A1 annotation class A1
annotation class A2(val some: Int = 12) annotation class A2(val some: Int = 12)
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: +ClassTypeParameterAnnotations // !LANGUAGE: +ClassTypeParameterAnnotations
annotation class A1 annotation class A1
annotation class A2(val some: Int = 12) annotation class A2(val some: Int = 12)
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions -ClassTypeParameterAnnotations // !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions -ClassTypeParameterAnnotations
annotation class A1 annotation class A1
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions -ClassTypeParameterAnnotations // !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions -ClassTypeParameterAnnotations
annotation class A1 annotation class A1
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// Functions can be recursively annotated // Functions can be recursively annotated
annotation class ann(val x: Int) annotation class ann(val x: Int)
@ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>bar()<!>) fun foo() = 1 @ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>bar()<!>) fun foo() = 1
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// Functions can be recursively annotated // Functions can be recursively annotated
annotation class ann(val x: Int) annotation class ann(val x: Int)
@ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>bar()<!>) fun foo() = 1 @ann(<!ANNOTATION_ARGUMENT_MUST_BE_CONST!>bar()<!>) fun foo() = 1
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
annotation class Ann annotation class Ann
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
annotation class Ann annotation class Ann
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// FIR_IDENTICAL // FIR_IDENTICAL
// !LANGUAGE: +NestedClassesInAnnotations // !LANGUAGE: +NestedClassesInAnnotations
@@ -1,3 +1,4 @@
// IGNORE_REVERSED_RESOLVE
// !LANGUAGE: -NestedClassesInAnnotations // !LANGUAGE: -NestedClassesInAnnotations
annotation class Annotation2() { annotation class Annotation2() {

Some files were not shown because too many files have changed in this diff Show More