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 01b37171897..4ad353d8e98 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,7 +5,7 @@ package org.jetbrains.kotlin.fir.pipeline -import org.jetbrains.kotlin.ir.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.backend.common.CodegenUtil import org.jetbrains.kotlin.backend.common.actualizer.IrActualizedResult import org.jetbrains.kotlin.backend.common.actualizer.IrActualizer import org.jetbrains.kotlin.backend.common.actualizer.SpecialFakeOverrideSymbolsResolver @@ -21,11 +21,18 @@ import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProv import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.ir.IrBuiltIns +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.KtDiagnosticReporterWithImplicitIrBasedContext +import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl -import org.jetbrains.kotlin.ir.overrides.buildForAll +import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase +import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder import org.jetbrains.kotlin.ir.types.IrTypeSystemContext +import org.jetbrains.kotlin.ir.types.getClass import org.jetbrains.kotlin.ir.util.KotlinMangler +import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid +import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid data class FirResult(val outputs: List) @@ -125,6 +132,44 @@ fun FirResult.convertToIrAndActualize( return Fir2IrActualizedResult(irModuleFragment, components, pluginContext, actualizationResult) } +private fun IrFakeOverrideBuilder.buildForAll(modules: List) { + val builtFakeOverridesClasses = mutableSetOf() + fun buildFakeOverrides(clazz: IrClass) { + if (clazz is IrLazyDeclarationBase) return + if (!builtFakeOverridesClasses.add(clazz)) return + for (c in clazz.superTypes) { + c.getClass()?.let { buildFakeOverrides(it) } + } + buildFakeOverridesForClass(clazz, false) + } + + class ClassVisitor : IrElementVisitorVoid { + override fun visitElement(element: IrElement) { + element.acceptChildrenVoid(this) + } + + override fun visitClass(declaration: IrClass) { + buildFakeOverrides(declaration) + declaration.acceptChildrenVoid(this) + } + } + + for (module in modules) { + for (file in module.files) { + try { + file.acceptVoid(ClassVisitor()) + } catch (e: Throwable) { + CodegenUtil.reportBackendException(e, "IR fake override builder", file.fileEntry.name) { offset -> + file.fileEntry.takeIf { it.supportsDebugInfo }?.let { + val (line, column) = it.getLineAndColumnNumbers(offset) + line to column + } + } + } + } + } +} + private fun convertToIr( firOutput: ModuleCompilerAnalyzedOutput, fir2IrExtensions: Fir2IrExtensions, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt index e48d9d440fa..65a7352db79 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt @@ -8,9 +8,7 @@ package org.jetbrains.kotlin.ir.overrides import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibility import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol @@ -18,9 +16,6 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.collectAndFilterRealOverrides import org.jetbrains.kotlin.ir.util.fileOrNull import org.jetbrains.kotlin.ir.util.render -import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid -import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid -import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.TypeCheckerState @@ -519,27 +514,3 @@ fun IrDeclaration.isOverridableMemberOrAccessor(): Boolean = when (this) { is IrProperty -> isOverridableProperty() else -> false } - -fun IrFakeOverrideBuilder.buildForAll(modules: List) { - val builtFakeOverridesClasses = mutableSetOf() - fun buildFakeOverrides(clazz: IrClass) { - if (clazz is IrLazyDeclarationBase) return - if (!builtFakeOverridesClasses.add(clazz)) return - for (c in clazz.superTypes) { - c.getClass()?.let { buildFakeOverrides(it) } - } - buildFakeOverridesForClass(clazz, false) - } - class ClassVisitor : IrElementVisitorVoid { - override fun visitElement(element: IrElement) { - element.acceptChildrenVoid(this) - } - override fun visitClass(declaration: IrClass) { - buildFakeOverrides(declaration) - declaration.acceptChildrenVoid(this) - } - } - for (module in modules) { - module.acceptVoid(ClassVisitor()) - } -} \ No newline at end of file