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.
This commit is contained in:
Alexander Udalov
2024-02-27 17:47:54 +01:00
committed by Space Team
parent b88ce50500
commit ebc2a18da5
@@ -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)
}
}