[FIR2IR] Add fir2ir component for converting fir visibility to FE 1.0
This commit is contained in:
+3
-1
@@ -63,6 +63,7 @@ import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmClassCodegen
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.extensions.BunchOfRegisteredExtensions
|
||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||
@@ -405,7 +406,8 @@ object KotlinToJVMBytecodeCompiler {
|
||||
Fir2IrConverter.createModuleFragment(
|
||||
session, resolveTransformer.scopeSession, firFiles,
|
||||
moduleConfiguration.languageVersionSettings, signaturer,
|
||||
JvmGeneratorExtensions(), FirJvmKotlinMangler(session), IrFactoryImpl
|
||||
JvmGeneratorExtensions(), FirJvmKotlinMangler(session), IrFactoryImpl,
|
||||
FirJvmVisibilityConverter
|
||||
)
|
||||
|
||||
performanceManager?.notifyIRTranslationFinished()
|
||||
|
||||
@@ -7,6 +7,7 @@ dependencies {
|
||||
compileOnly(project(":core:descriptors"))
|
||||
compileOnly(project(":compiler:fir:cones"))
|
||||
compileOnly(project(":compiler:fir:resolve"))
|
||||
compileOnly(project(":compiler:fir:jvm"))
|
||||
compileOnly(project(":compiler:fir:tree"))
|
||||
compileOnly(project(":compiler:fir:fir2ir"))
|
||||
compileOnly(project(":compiler:fir:fir-serialization"))
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2010-2020 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.fir.backend.jvm
|
||||
|
||||
import org.jetbrains.kotlin.fir.JavaVisibilities
|
||||
import org.jetbrains.kotlin.fir.Visibility
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrVisibilityConverter
|
||||
import org.jetbrains.kotlin.descriptors.Visibility as OldVisibility
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities as OldJavaVisibilities
|
||||
|
||||
|
||||
object FirJvmVisibilityConverter : Fir2IrVisibilityConverter() {
|
||||
override fun convertPlatformVisibility(visibility: Visibility): OldVisibility {
|
||||
return when (visibility) {
|
||||
JavaVisibilities.PackageVisibility -> OldJavaVisibilities.PACKAGE_VISIBILITY
|
||||
JavaVisibilities.ProtectedStaticVisibility -> OldJavaVisibilities.PROTECTED_STATIC_VISIBILITY
|
||||
JavaVisibilities.ProtectedAndPackage -> OldJavaVisibilities.PROTECTED_AND_PACKAGE
|
||||
else -> error("Unknown visibility: $this")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -50,8 +50,6 @@ import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities as OldVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility as OldVisibility
|
||||
|
||||
internal fun <T : IrElement> FirElement.convertWithOffsets(
|
||||
f: (startOffset: Int, endOffset: Int) -> T
|
||||
@@ -491,15 +489,3 @@ fun Fir2IrComponents.createTemporaryVariableForSafeCallConstruction(
|
||||
|
||||
return Pair(receiverVariable, variableSymbol)
|
||||
}
|
||||
|
||||
fun Visibility.toOldVisibility(): OldVisibility = when (this.normalize()) {
|
||||
Visibilities.Private -> OldVisibilities.PRIVATE
|
||||
Visibilities.PrivateToThis -> OldVisibilities.PRIVATE_TO_THIS
|
||||
Visibilities.Protected -> OldVisibilities.PROTECTED
|
||||
Visibilities.Internal -> OldVisibilities.INTERNAL
|
||||
Visibilities.Public -> OldVisibilities.PUBLIC
|
||||
Visibilities.Local -> OldVisibilities.LOCAL
|
||||
Visibilities.InvisibleFake -> OldVisibilities.INVISIBLE_FAKE
|
||||
Visibilities.Unknown -> OldVisibilities.UNKNOWN
|
||||
else -> error("Unknown visiblity: $this")
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ class Fir2IrClassifierStorage(
|
||||
declareIrTypeAlias(signature) { symbol ->
|
||||
val irTypeAlias = irFactory.createTypeAlias(
|
||||
startOffset, endOffset, symbol,
|
||||
typeAlias.name, typeAlias.visibility.toOldVisibility(),
|
||||
typeAlias.name, components.visibilityConverter.convertToOldVisibility(typeAlias.visibility),
|
||||
typeAlias.expandedTypeRef.toIrType(),
|
||||
typeAlias.isActual, IrDeclarationOrigin.DEFINED
|
||||
).apply {
|
||||
@@ -237,7 +237,7 @@ class Fir2IrClassifierStorage(
|
||||
symbol,
|
||||
regularClass.name,
|
||||
regularClass.classKind,
|
||||
visibility.toOldVisibility(),
|
||||
components.visibilityConverter.convertToOldVisibility(visibility),
|
||||
modality,
|
||||
isCompanion = regularClass.isCompanion,
|
||||
isInner = regularClass.isInner,
|
||||
@@ -277,7 +277,7 @@ class Fir2IrClassifierStorage(
|
||||
startOffset, endOffset, origin, symbol, name,
|
||||
// NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects
|
||||
anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS,
|
||||
visibility.toOldVisibility(), modality
|
||||
components.visibilityConverter.convertToOldVisibility(visibility), modality
|
||||
).apply {
|
||||
metadata = FirMetadataSource.Class(anonymousObject)
|
||||
setThisReceiver(anonymousObject.typeParameters)
|
||||
|
||||
@@ -26,4 +26,5 @@ interface Fir2IrComponents {
|
||||
val signatureComposer: Fir2IrSignatureComposer
|
||||
val callGenerator: CallAndReferenceGenerator
|
||||
val fakeOverrideGenerator: FakeOverrideGenerator
|
||||
val visibilityConverter: Fir2IrVisibilityConverter
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ class Fir2IrComponentsStorage(
|
||||
override lateinit var typeConverter: Fir2IrTypeConverter
|
||||
override lateinit var callGenerator: CallAndReferenceGenerator
|
||||
override lateinit var fakeOverrideGenerator: FakeOverrideGenerator
|
||||
override lateinit var visibilityConverter: Fir2IrVisibilityConverter
|
||||
override lateinit var builtIns: Fir2IrBuiltIns
|
||||
|
||||
override val signatureComposer = FirBasedSignatureComposer(mangler)
|
||||
|
||||
@@ -255,6 +255,7 @@ class Fir2IrConverter(
|
||||
generatorExtensions: GeneratorExtensions,
|
||||
mangler: FirMangler,
|
||||
irFactory: IrFactory,
|
||||
visibilityConverter: Fir2IrVisibilityConverter
|
||||
): Fir2IrResult {
|
||||
val moduleDescriptor = FirModuleDescriptor(session)
|
||||
val symbolTable = SymbolTable(signaturer, irFactory)
|
||||
@@ -279,6 +280,7 @@ class Fir2IrConverter(
|
||||
components.declarationStorage = declarationStorage
|
||||
components.classifierStorage = classifierStorage
|
||||
components.typeConverter = typeConverter
|
||||
components.visibilityConverter = visibilityConverter
|
||||
components.builtIns = builtIns
|
||||
val irFiles = mutableListOf<IrFile>()
|
||||
|
||||
@@ -330,4 +332,4 @@ class Fir2IrConverter(
|
||||
return Fir2IrResult(irModuleFragment, symbolTable, sourceManager, components)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-8
@@ -406,7 +406,7 @@ class Fir2IrDeclarationStorage(
|
||||
val result = declareIrSimpleFunction(signature, simpleFunction?.containerSource) { symbol ->
|
||||
irFactory.createFunction(
|
||||
startOffset, endOffset, updatedOrigin, symbol,
|
||||
name, visibility.toOldVisibility(),
|
||||
name, components.visibilityConverter.convertToOldVisibility(visibility),
|
||||
simpleFunction?.modality ?: Modality.FINAL,
|
||||
function.returnTypeRef.toIrType(),
|
||||
isInline = simpleFunction?.isInline == true,
|
||||
@@ -483,7 +483,7 @@ class Fir2IrDeclarationStorage(
|
||||
declareIrConstructor(signature) { symbol ->
|
||||
irFactory.createConstructor(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
Name.special("<init>"), constructor.visibility.toOldVisibility(),
|
||||
Name.special("<init>"), components.visibilityConverter.convertToOldVisibility(constructor.visibility),
|
||||
constructor.returnTypeRef.toIrType(),
|
||||
isInline = false, isExternal = false, isPrimary = isPrimary, isExpect = constructor.isExpect
|
||||
).apply {
|
||||
@@ -535,10 +535,13 @@ class Fir2IrDeclarationStorage(
|
||||
isGetter = !isSetter
|
||||
) { symbol ->
|
||||
val accessorReturnType = if (isSetter) irBuiltIns.unitType else propertyType
|
||||
val visibility = propertyAccessor?.visibility?.let {
|
||||
components.visibilityConverter.convertToOldVisibility(it)
|
||||
}
|
||||
irFactory.createFunction(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
Name.special("<$prefix-${correspondingProperty.name}>"),
|
||||
propertyAccessor?.visibility?.toOldVisibility() ?: correspondingProperty.visibility,
|
||||
visibility ?: correspondingProperty.visibility,
|
||||
correspondingProperty.modality, accessorReturnType,
|
||||
isInline = propertyAccessor?.isInline == true,
|
||||
isExternal = propertyAccessor?.isExternal == true,
|
||||
@@ -650,7 +653,7 @@ class Fir2IrDeclarationStorage(
|
||||
val result = declareIrProperty(signature, property.containerSource) { symbol ->
|
||||
irFactory.createProperty(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
property.name, property.visibility.toOldVisibility(), property.modality!!,
|
||||
property.name, components.visibilityConverter.convertToOldVisibility(property.visibility), property.modality!!,
|
||||
isVar = property.isVar,
|
||||
isConst = property.isConst,
|
||||
isLateinit = property.isLateInit,
|
||||
@@ -678,8 +681,8 @@ class Fir2IrDeclarationStorage(
|
||||
) {
|
||||
backingField = createBackingField(
|
||||
property, IrDeclarationOrigin.PROPERTY_BACKING_FIELD, descriptor,
|
||||
property.fieldVisibility.toOldVisibility(), property.name, property.isVal, initializer,
|
||||
type
|
||||
components.visibilityConverter.convertToOldVisibility(property.fieldVisibility),
|
||||
property.name, property.isVal, initializer, type
|
||||
).also { field ->
|
||||
if (initializer is FirConstExpression<*>) {
|
||||
// TODO: Normally we shouldn't have error type here
|
||||
@@ -690,7 +693,8 @@ class Fir2IrDeclarationStorage(
|
||||
} else if (delegate != null) {
|
||||
backingField = createBackingField(
|
||||
property, IrDeclarationOrigin.PROPERTY_DELEGATE, descriptor,
|
||||
property.fieldVisibility.toOldVisibility(), Name.identifier("${property.name}\$delegate"), true, delegate
|
||||
components.visibilityConverter.convertToOldVisibility(property.fieldVisibility),
|
||||
Name.identifier("${property.name}\$delegate"), true, delegate
|
||||
)
|
||||
}
|
||||
if (irParent != null) {
|
||||
@@ -770,7 +774,7 @@ class Fir2IrDeclarationStorage(
|
||||
) { symbol ->
|
||||
irFactory.createField(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
field.name, type, field.visibility.toOldVisibility(),
|
||||
field.name, type, components.visibilityConverter.convertToOldVisibility(field.visibility),
|
||||
isFinal = field.modality == Modality.FINAL,
|
||||
isExternal = false,
|
||||
isStatic = field.isStatic
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2020 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.fir.backend
|
||||
|
||||
import org.jetbrains.kotlin.fir.Visibilities
|
||||
import org.jetbrains.kotlin.fir.Visibility
|
||||
import org.jetbrains.kotlin.descriptors.Visibility as OldVisibility
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities as OldVisibilities
|
||||
|
||||
abstract class Fir2IrVisibilityConverter {
|
||||
object Default : Fir2IrVisibilityConverter() {
|
||||
override fun convertPlatformVisibility(visibility: Visibility): OldVisibility {
|
||||
error("Unknown visibility: $this")
|
||||
}
|
||||
}
|
||||
|
||||
fun convertToOldVisibility(visibility: Visibility): OldVisibility {
|
||||
return when (visibility) {
|
||||
Visibilities.Private -> OldVisibilities.PRIVATE
|
||||
Visibilities.PrivateToThis -> OldVisibilities.PRIVATE_TO_THIS
|
||||
Visibilities.Protected -> OldVisibilities.PROTECTED
|
||||
Visibilities.Internal -> OldVisibilities.INTERNAL
|
||||
Visibilities.Public -> OldVisibilities.PUBLIC
|
||||
Visibilities.Local -> OldVisibilities.LOCAL
|
||||
Visibilities.InvisibleFake -> OldVisibilities.INVISIBLE_FAKE
|
||||
Visibilities.Unknown -> OldVisibilities.UNKNOWN
|
||||
else -> convertPlatformVisibility(visibility)
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract fun convertPlatformVisibility(visibility: Visibility): OldVisibility
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.backend.toIrType
|
||||
import org.jetbrains.kotlin.fir.backend.toOldVisibility
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
|
||||
@@ -57,7 +56,7 @@ class Fir2IrLazyClass(
|
||||
get() = fir.name
|
||||
|
||||
@Suppress("SetterBackingFieldAssignment")
|
||||
override var visibility: OldVisibility = fir.visibility.toOldVisibility()
|
||||
override var visibility: OldVisibility = components.visibilityConverter.convertToOldVisibility(fir.visibility)
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.backend.toIrType
|
||||
import org.jetbrains.kotlin.fir.backend.toOldVisibility
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
@@ -63,7 +62,7 @@ class Fir2IrLazyConstructor(
|
||||
get() = Name.special("<init>")
|
||||
|
||||
@Suppress("SetterBackingFieldAssignment")
|
||||
override var visibility: OldVisibility = fir.visibility.toOldVisibility()
|
||||
override var visibility: OldVisibility = components.visibilityConverter.convertToOldVisibility(fir.visibility)
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||
import org.jetbrains.kotlin.fir.backend.toIrConst
|
||||
import org.jetbrains.kotlin.fir.backend.toOldVisibility
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
||||
@@ -71,7 +70,7 @@ class Fir2IrLazyProperty(
|
||||
get() = fir.name
|
||||
|
||||
@Suppress("SetterBackingFieldAssignment")
|
||||
override var visibility: OldVisibility = fir.visibility.toOldVisibility()
|
||||
override var visibility: OldVisibility = components.visibilityConverter.convertToOldVisibility(fir.visibility)
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
@@ -95,7 +94,7 @@ class Fir2IrLazyProperty(
|
||||
with(declarationStorage) {
|
||||
createBackingField(
|
||||
fir, IrDeclarationOrigin.PROPERTY_BACKING_FIELD, descriptor,
|
||||
fir.fieldVisibility.toOldVisibility(), fir.name, fir.isVal, fir.initializer,
|
||||
components.visibilityConverter.convertToOldVisibility(fir.visibility), fir.name, fir.isVal, fir.initializer,
|
||||
type
|
||||
).also { field ->
|
||||
val initializer = fir.initializer
|
||||
@@ -111,7 +110,7 @@ class Fir2IrLazyProperty(
|
||||
with(declarationStorage) {
|
||||
createBackingField(
|
||||
fir, IrDeclarationOrigin.PROPERTY_DELEGATE, descriptor,
|
||||
fir.fieldVisibility.toOldVisibility(), Name.identifier("${fir.name}\$delegate"), true, fir.delegate
|
||||
components.visibilityConverter.convertToOldVisibility(fir.visibility), Name.identifier("${fir.name}\$delegate"), true, fir.delegate
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ class Fir2IrLazySimpleFunction(
|
||||
get() = fir.name
|
||||
|
||||
@Suppress("SetterBackingFieldAssignment")
|
||||
override var visibility: OldVisibility = fir.visibility.toOldVisibility()
|
||||
override var visibility: OldVisibility = components.visibilityConverter.convertToOldVisibility(fir.visibility)
|
||||
set(_) {
|
||||
error("Mutating Fir2Ir lazy elements is not possible")
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||
@@ -93,6 +94,7 @@ abstract class AbstractFir2IrTextTest : AbstractIrTextTestCase() {
|
||||
JvmGeneratorExtensions(generateFacades = false),
|
||||
FirJvmKotlinMangler(session),
|
||||
IrFactoryImpl,
|
||||
FirJvmVisibilityConverter
|
||||
).irModuleFragment
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendClassResolver
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmClassCodegen
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.createSession
|
||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||
@@ -150,6 +151,7 @@ object GenerationUtils {
|
||||
JvmGeneratorExtensions(),
|
||||
FirJvmKotlinMangler(session),
|
||||
IrFactoryImpl,
|
||||
FirJvmVisibilityConverter
|
||||
)
|
||||
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
||||
|
||||
|
||||
Reference in New Issue
Block a user