Revert unrelated refactoring from "FIR: Fix interface delegation ABI"

the refactoring is questionable at places and breaks FirScript support
This commit is contained in:
Ilya Chernikov
2022-12-05 10:28:29 +01:00
committed by Space Team
parent 64319477f0
commit bc2aa20b86
@@ -42,7 +42,6 @@ import org.jetbrains.kotlin.ir.interpreter.checker.IrConstTransformer
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.utils.addIfNotNull
class Fir2IrConverter( class Fir2IrConverter(
private val moduleDescriptor: FirModuleDescriptor, private val moduleDescriptor: FirModuleDescriptor,
@@ -183,7 +182,8 @@ class Fir2IrConverter(
private fun processFileAndClassMembers(file: FirFile) { private fun processFileAndClassMembers(file: FirFile) {
val irFile = declarationStorage.getIrFile(file) val irFile = declarationStorage.getIrFile(file)
for (declaration in file.declarations) { for (declaration in file.declarations) {
processMemberDeclaration(declaration, null, irFile) val irDeclaration = processMemberDeclaration(declaration, null, irFile) ?: continue
irFile.declarations += irDeclaration
} }
} }
@@ -202,7 +202,8 @@ class Fir2IrConverter(
) )
} }
for (declaration in syntheticPropertiesLast(anonymousObject.declarations)) { for (declaration in syntheticPropertiesLast(anonymousObject.declarations)) {
processMemberDeclaration(declaration, anonymousObject, irClass) val irDeclaration = processMemberDeclaration(declaration, anonymousObject, irClass) ?: continue
irClass.declarations += irDeclaration
} }
// Add delegated members *before* fake override generations. // Add delegated members *before* fake override generations.
// Otherwise, fake overrides for delegated members, which are redundant, will be added. // Otherwise, fake overrides for delegated members, which are redundant, will be added.
@@ -234,7 +235,8 @@ class Fir2IrConverter(
} }
// At least on enum entry creation we may need a default constructor, so ctors should be converted first // At least on enum entry creation we may need a default constructor, so ctors should be converted first
for (declaration in syntheticPropertiesLast(allDeclarations)) { for (declaration in syntheticPropertiesLast(allDeclarations)) {
processMemberDeclaration(declaration, regularClass, irClass) val irDeclaration = processMemberDeclaration(declaration, regularClass, irClass) ?: continue
irClass.declarations += irDeclaration
} }
// Add delegated members *before* fake override generations. // Add delegated members *before* fake override generations.
// Otherwise, fake overrides for delegated members, which are redundant, will be added. // Otherwise, fake overrides for delegated members, which are redundant, will be added.
@@ -342,60 +344,63 @@ class Fir2IrConverter(
} }
} }
// Process `declaration` and add the results to `parent`.
private fun processMemberDeclaration( private fun processMemberDeclaration(
declaration: FirDeclaration, declaration: FirDeclaration,
containingClass: FirClass?, containingClass: FirClass?,
parent: IrDeclarationContainer parent: IrDeclarationParent
) { ): IrDeclaration? {
val isLocal = containingClass != null && val isLocal = containingClass != null &&
(containingClass !is FirRegularClass || containingClass.isLocal) (containingClass !is FirRegularClass || containingClass.isLocal)
when (declaration) { return when (declaration) {
is FirRegularClass -> { is FirRegularClass -> {
parent.declarations += processClassMembers(declaration) processClassMembers(declaration)
} }
is FirScript -> { is FirScript -> {
assert(parent is IrFile) assert(parent is IrFile)
declarationStorage.getOrCreateIrScript(declaration) declarationStorage.getOrCreateIrScript(declaration)
} }
is FirSimpleFunction -> { is FirSimpleFunction -> {
parent.declarations += declarationStorage.getOrCreateIrFunction( declarationStorage.getOrCreateIrFunction(
declaration, parent, isLocal = isLocal declaration, parent, isLocal = isLocal
) )
} }
is FirProperty -> { is FirProperty -> {
if (declaration.source?.kind != KtFakeSourceElementKind.EnumGeneratedDeclaration || if (declaration.source?.kind == KtFakeSourceElementKind.EnumGeneratedDeclaration &&
declaration.name != StandardNames.ENUM_ENTRIES || declaration.name == StandardNames.ENUM_ENTRIES &&
session.languageVersionSettings.supportsFeature(LanguageFeature.EnumEntries) !session.languageVersionSettings.supportsFeature(LanguageFeature.EnumEntries)
) { ) {
parent.declarations += declarationStorage.getOrCreateIrProperty( // Note: we have to do it, because backend without the feature
// cannot process Enum.entries properly
null
} else {
declarationStorage.getOrCreateIrProperty(
declaration, parent, isLocal = isLocal declaration, parent, isLocal = isLocal
) )
} }
} }
is FirField -> { is FirField -> {
require(declaration.isSynthetic) { if (declaration.isSynthetic) {
"Unexpected non-synthetic field: ${declaration::class}"
}
parent.declarations.addIfNotNull(
declarationStorage.createIrFieldAndDelegatedMembers(declaration, containingClass!!, parent as IrClass) declarationStorage.createIrFieldAndDelegatedMembers(declaration, containingClass!!, parent as IrClass)
) } else {
} throw AssertionError("Unexpected non-synthetic field: ${declaration::class}")
is FirConstructor -> {
if (!declaration.isPrimary) {
parent.declarations += declarationStorage.getOrCreateIrConstructor(
declaration, parent as IrClass, isLocal = isLocal
)
} }
} }
is FirConstructor -> if (!declaration.isPrimary) {
declarationStorage.getOrCreateIrConstructor(
declaration, parent as IrClass, isLocal = isLocal
)
} else {
null
}
is FirEnumEntry -> { is FirEnumEntry -> {
parent.declarations += classifierStorage.createIrEnumEntry(declaration, parent as IrClass) classifierStorage.createIrEnumEntry(declaration, parent as IrClass)
} }
is FirAnonymousInitializer -> { is FirAnonymousInitializer -> {
parent.declarations += declarationStorage.createIrAnonymousInitializer(declaration, parent as IrClass) declarationStorage.createIrAnonymousInitializer(declaration, parent as IrClass)
} }
is FirTypeAlias -> { is FirTypeAlias -> {
// DO NOTHING // DO NOTHING
null
} }
else -> { else -> {
error("Unexpected member: ${declaration::class}") error("Unexpected member: ${declaration::class}")