diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt index e6b6f82b793..050aeb8dc42 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.pipeline +import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext import org.jetbrains.kotlin.backend.common.actualizer.IrActualizedResult import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension @@ -143,9 +144,11 @@ fun FirResult.convertToIrAndActualize( actualizationResult = IrActualizer.actualize( fir2IrResult.irModuleFragment, commonIrOutputs.map { it.irModuleFragment }, - fir2IrConfiguration.diagnosticReporter, + KtDiagnosticReporterWithImplicitIrBasedContext( + fir2IrConfiguration.diagnosticReporter, + fir2IrConfiguration.languageVersionSettings + ), actualizerTypeContextProvider(fir2IrResult.irModuleFragment.irBuiltins), - fir2IrConfiguration.languageVersionSettings, commonMemberStorage.symbolTable, fir2IrResult.components.fakeOverrideBuilder, fir2IrConfiguration.useIrFakeOverrideBuilder, diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt index 9af9faa5c73..b370fc83200 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/KtDiagnosticReporterWithImplicitIrBasedContext.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.KtDiagnostic import org.jetbrains.kotlin.diagnostics.KtDiagnosticReporterWithContext import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFile @@ -28,7 +29,7 @@ import java.util.* class KtDiagnosticReporterWithImplicitIrBasedContext( diagnosticReporter: DiagnosticReporter, languageVersionSettings: LanguageVersionSettings -) : KtDiagnosticReporterWithContext(diagnosticReporter, languageVersionSettings) { +) : KtDiagnosticReporterWithContext(diagnosticReporter, languageVersionSettings), IrDiagnosticReporter { private val suppressCache = IrBasedSuppressCache() @@ -36,13 +37,13 @@ class KtDiagnosticReporterWithImplicitIrBasedContext( (PsiSourceManager.findPsiElement(this, containingIrFile)?.let(::KtRealPsiSourceElement) ?: sourceElement()) - fun at(irElement: IrElement, containingIrDeclaration: IrDeclaration): DiagnosticContextImpl = + override fun at(irElement: IrElement, containingIrDeclaration: IrDeclaration): DiagnosticContextImpl = at(irElement, containingIrDeclaration.file) - fun at(irDeclaration: IrDeclaration): DiagnosticContextImpl = + override fun at(irDeclaration: IrDeclaration): DiagnosticContextImpl = at(irDeclaration, irDeclaration.file) - fun at(irElement: IrElement, containingIrFile: IrFile): DiagnosticContextImpl = + override fun at(irElement: IrElement, containingIrFile: IrFile): DiagnosticContextImpl = at(irElement.toSourceElement(containingIrFile), irElement, containingIrFile) fun at( diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ActualFakeOverridesAdder.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ActualFakeOverridesAdder.kt index 800b909b40e..7b44ceb9d0e 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ActualFakeOverridesAdder.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ActualFakeOverridesAdder.kt @@ -5,8 +5,6 @@ package org.jetbrains.kotlin.backend.common.actualizer -import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext -import org.jetbrains.kotlin.backend.common.CommonBackendErrors import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* @@ -16,7 +14,6 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.IrTypeSystemContext import org.jetbrains.kotlin.ir.types.classifierOrFail -import org.jetbrains.kotlin.ir.util.isInterface import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.name.ClassId @@ -35,7 +32,6 @@ import org.jetbrains.kotlin.resolve.OverridingUtil internal class ActualFakeOverridesAdder( private val expectActualMap: Map, private val expectToActualClassMap: Map, - private val diagnosticsReporter: KtDiagnosticReporterWithImplicitIrBasedContext, private val typeSystemContext: IrTypeSystemContext ) : IrElementVisitorVoid { private val overrideChecker = IrOverrideChecker(typeSystemContext, emptyList()) diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt index 35e98b405c9..0106b7db9bc 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/ExpectActualCollector.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.backend.common.actualizer -import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.ir.IrElement @@ -47,7 +47,7 @@ internal class ExpectActualCollector( private val mainFragment: IrModuleFragment, private val dependentFragments: List, private val typeSystemContext: IrTypeSystemContext, - private val diagnosticsReporter: KtDiagnosticReporterWithImplicitIrBasedContext, + private val diagnosticsReporter: IrDiagnosticReporter, private val expectActualTracker: ExpectActualTracker?, ) { data class Result(val expectToActualMap: MutableMap, val classActualizationInfo: ClassActualizationInfo) @@ -246,7 +246,7 @@ private class ExpectActualLinkCollector : IrElementVisitor, - private val diagnosticsReporter: KtDiagnosticReporterWithImplicitIrBasedContext, + private val diagnosticsReporter: IrDiagnosticReporter, private val expectActualTracker: ExpectActualTracker?, internal val classActualizationInfo: ClassActualizationInfo, private val currentExpectFile: IrFile?, diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt index 29c80807aab..b7ce9f2be79 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizer.kt @@ -5,11 +5,8 @@ package org.jetbrains.kotlin.backend.common.actualizer -import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.backend.common.actualizer.checker.IrExpectActualCheckers -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder @@ -30,15 +27,13 @@ object IrActualizer { fun actualize( mainFragment: IrModuleFragment, dependentFragments: List, - diagnosticReporter: DiagnosticReporter, + ktDiagnosticReporter: IrDiagnosticReporter, typeSystemContext: IrTypeSystemContext, - languageVersionSettings: LanguageVersionSettings, symbolTable: SymbolTable, fakeOverrideBuilder: IrFakeOverrideBuilder, useIrFakeOverrideBuilder: Boolean, expectActualTracker: ExpectActualTracker? ): IrActualizedResult { - val ktDiagnosticReporter = KtDiagnosticReporterWithImplicitIrBasedContext(diagnosticReporter, languageVersionSettings) // The ir modules processing is performed phase-to-phase: // 1. Collect expect-actual links for classes and their members from dependent fragments @@ -67,7 +62,6 @@ object IrActualizer { ActualFakeOverridesAdder( expectActualMap, actualDeclarations.actualClasses, - ktDiagnosticReporter, typeSystemContext ).apply { dependentFragments.forEach { visitModuleFragment(it) } } } diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizerUtils.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizerUtils.kt index 288acc745d1..12c436e39e7 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizerUtils.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/IrActualizerUtils.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.backend.common.actualizer -import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.backend.common.CommonBackendErrors import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.ir.IrElement @@ -94,12 +94,12 @@ private fun recordTypeParametersMapping( } } -internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportMissingActual(expectSymbol: IrSymbol) { +internal fun IrDiagnosticReporter.reportMissingActual(expectSymbol: IrSymbol) { reportMissingActual(expectSymbol.owner as IrDeclaration) } @OptIn(ObsoleteDescriptorBasedAPI::class) -internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportMissingActual(irDeclaration: IrDeclaration) { +internal fun IrDiagnosticReporter.reportMissingActual(irDeclaration: IrDeclaration) { at(irDeclaration).report( CommonBackendErrors.NO_ACTUAL_FOR_EXPECT, (irDeclaration as? IrDeclarationWithName)?.name?.asString().orEmpty(), @@ -107,7 +107,7 @@ internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportMissingActual( ) } -internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportExpectActualIncompatibility( +internal fun IrDiagnosticReporter.reportExpectActualIncompatibility( expectSymbol: IrSymbol, actualSymbol: IrSymbol, incompatibility: ExpectActualCheckingCompatibility.Incompatible<*>, @@ -122,7 +122,7 @@ internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportExpectActualIn ) } -internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportExpectActualMismatch( +internal fun IrDiagnosticReporter.reportExpectActualMismatch( expectSymbol: IrSymbol, actualSymbol: IrSymbol, incompatibility: ExpectActualMatchingCompatibility.Mismatch, @@ -137,7 +137,7 @@ internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportExpectActualMi ) } -internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportActualAnnotationsNotMatchExpect( +internal fun IrDiagnosticReporter.reportActualAnnotationsNotMatchExpect( expectSymbol: IrSymbol, actualSymbol: IrSymbol, incompatibilityType: ExpectActualAnnotationsIncompatibilityType, @@ -151,7 +151,7 @@ internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportActualAnnotati ) } -internal fun KtDiagnosticReporterWithImplicitIrBasedContext.reportActualAnnotationConflictingDefaultArgumentValue( +internal fun IrDiagnosticReporter.reportActualAnnotationConflictingDefaultArgumentValue( reportOn: IrElement, file: IrFile, actualParam: IrValueParameter, diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualChecker.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualChecker.kt index 2de15cf0457..0369f63265b 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualChecker.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualChecker.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.backend.common.actualizer.checker -import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.backend.common.actualizer.ClassActualizationInfo import org.jetbrains.kotlin.backend.common.actualizer.IrExpectActualMatchingContext import org.jetbrains.kotlin.ir.symbols.IrSymbol @@ -16,7 +16,7 @@ internal interface IrExpectActualChecker { val matchedExpectToActual: Map val classActualizationInfo: ClassActualizationInfo val typeSystemContext: IrTypeSystemContext - val diagnosticsReporter: KtDiagnosticReporterWithImplicitIrBasedContext + val diagnosticsReporter: IrDiagnosticReporter val matchingContext: IrExpectActualMatchingContext } diff --git a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualCheckers.kt b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualCheckers.kt index 0f6fd06ab24..9d59c6a9678 100644 --- a/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualCheckers.kt +++ b/compiler/ir/ir.actualization/src/main/kotlin/org/jetbrains/kotlin/backend/common/actualizer/checker/IrExpectActualCheckers.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.backend.common.actualizer.checker -import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.ir.IrDiagnosticReporter import org.jetbrains.kotlin.backend.common.actualizer.ClassActualizationInfo import org.jetbrains.kotlin.backend.common.actualizer.IrExpectActualMatchingContext import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -16,7 +16,7 @@ internal class IrExpectActualCheckers( override val matchedExpectToActual: Map, override val classActualizationInfo: ClassActualizationInfo, override val typeSystemContext: IrTypeSystemContext, - override val diagnosticsReporter: KtDiagnosticReporterWithImplicitIrBasedContext, + override val diagnosticsReporter: IrDiagnosticReporter, ) : IrExpectActualChecker.Context { private val checkers: Set = setOf( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrDiagnosticReporter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrDiagnosticReporter.kt new file mode 100644 index 00000000000..2d77b1229c5 --- /dev/null +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/IrDiagnosticReporter.kt @@ -0,0 +1,18 @@ +/* + * 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.ir + +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.diagnostics.KtDiagnosticReporterWithContext.DiagnosticContextImpl +import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrFile + +interface IrDiagnosticReporter { + val languageVersionSettings: LanguageVersionSettings + fun at(irDeclaration: IrDeclaration): DiagnosticContextImpl + fun at(irElement: IrElement, containingIrFile: IrFile): DiagnosticContextImpl + fun at(irElement: IrElement, containingIrDeclaration: IrDeclaration): DiagnosticContextImpl +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt index 16d3868a4f8..830e7fcbf37 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/ir/IrActualizerAndPluginsFacade.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.test.backend.ir +import org.jetbrains.kotlin.KtDiagnosticReporterWithImplicitIrBasedContext import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.jvm.JvmIrTypeSystemContext @@ -32,9 +33,11 @@ class IrActualizerAndPluginsFacade( val result = IrActualizer.actualize( inputArtifact.irModuleFragment, inputArtifact.dependentIrModuleFragments, - inputArtifact.diagnosticReporter, + KtDiagnosticReporterWithImplicitIrBasedContext( + inputArtifact.diagnosticReporter, + testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings, + ), typeSystemContext, - testServices.compilerConfigurationProvider.getCompilerConfiguration(module).languageVersionSettings, inputArtifact.fir2IrComponents!!.symbolTable, inputArtifact.fir2IrComponents!!.fakeOverrideBuilder, useIrFakeOverrideBuilder = CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in module.directives,