From ebc2a18da5e6d9de2762e534b0059719be750bfa Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 27 Feb 2024 17:47:54 +0100 Subject: [PATCH] IR: do not build fake overrides for code fragments Code fragment is a class that extends from Any, so technically it can have fake overrides for equals/hashCode/toString. However, K1 does not build them, and it's already checked in IR text tests in `analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments`, so don't build them in K2 as well. Also, the code in `KtFirCompilerFacility.createJvmIrCodegenFactory` looks for a single function defined in the code fragment. --- .../src/org/jetbrains/kotlin/fir/pipeline/convertToIr.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) 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 43daf92ddc9..b6cf430ff73 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 @@ -24,10 +24,7 @@ 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.IrProperty -import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyDeclarationBase import org.jetbrains.kotlin.ir.overrides.IrFakeOverrideBuilder @@ -197,7 +194,9 @@ private fun IrFakeOverrideBuilder.buildForAll( } override fun visitClass(declaration: IrClass) { - buildFakeOverrides(declaration) + if (declaration.metadata !is MetadataSource.CodeFragment) { + buildFakeOverrides(declaration) + } declaration.acceptChildrenVoid(this) } }