FIR: unify common special names scattered around the code base

This commit is contained in:
Tianyu Geng
2021-07-28 14:25:24 -07:00
committed by teamcityserver
parent 263b876e6e
commit 684ef871ee
42 changed files with 161 additions and 145 deletions
@@ -46,10 +46,7 @@ import org.jetbrains.kotlin.metadata.deserialization.isKotlin1Dot4OrLater
import org.jetbrains.kotlin.metadata.serialization.Interner
import org.jetbrains.kotlin.metadata.serialization.MutableTypeTable
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.name.*
import org.jetbrains.kotlin.resolve.RequireKotlinConstants
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
import org.jetbrains.kotlin.types.AbstractTypeApproximator
@@ -384,7 +381,7 @@ class FirElementSerializer private constructor(
function.name
}
is FirAnonymousFunction -> {
if (function.isLambda) Name.special("<anonymous>") else Name.special("<no name provided>")
if (function.isLambda) SpecialNames.ANONYMOUS else Name.special("<no name provided>")
}
else -> throw AssertionError("Unsupported function: ${function.render()}")
}
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
@@ -127,7 +128,7 @@ open class FirJvmMangleComputer(
return
}
val name = (this as? FirSimpleFunction)?.name ?: Name.special("<anonymous>")
val name = (this as? FirSimpleFunction)?.name ?: SpecialNames.ANONYMOUS
builder.append(name.asString())
platformSpecificSuffix()?.let {
@@ -52,7 +52,7 @@ import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.KtQualifiedExpression
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
@@ -476,7 +476,7 @@ internal fun IrDeclarationParent.declareThisReceiverParameter(
): IrValueParameter =
symbolTable.irFactory.createValueParameter(
startOffset, endOffset, thisOrigin, IrValueParameterSymbolImpl(),
Name.special("<this>"), UNDEFINED_PARAMETER_INDEX, thisType,
SpecialNames.THIS, UNDEFINED_PARAMETER_INDEX, thisType,
varargElementType = null, isCrossinline = false, isNoinline = false,
isHidden = false, isAssignable = false
).apply {
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.builtins.StandardNames.BUILT_INS_PACKAGE_FQ_NAMES
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
@@ -50,6 +53,7 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
import org.jetbrains.kotlin.utils.threadLocal
@@ -456,7 +460,7 @@ class Fir2IrDeclarationStorage(
}
classifierStorage.preCacheTypeParameters(function)
val name = simpleFunction?.name
?: if (isLambda) Name.special("<anonymous>") else Name.special("<no name provided>")
?: if (isLambda) SpecialNames.ANONYMOUS else Name.special("<no name provided>")
val visibility = simpleFunction?.visibility ?: Visibilities.Local
val isSuspend =
if (isLambda) ((function as FirAnonymousFunction).typeRef as? FirResolvedTypeRef)?.type?.isSuspendFunctionType(session) == true
@@ -553,7 +557,7 @@ class Fir2IrDeclarationStorage(
declareIrConstructor(signature) { symbol ->
irFactory.createConstructor(
startOffset, endOffset, origin, symbol,
Name.special("<init>"), components.visibilityConverter.convertToDescriptorVisibility(constructor.visibility),
SpecialNames.INIT, components.visibilityConverter.convertToDescriptorVisibility(constructor.visibility),
constructor.returnTypeRef.toIrType(),
isInline = false, isExternal = false, isPrimary = isPrimary, isExpect = constructor.isExpect
).apply {
@@ -977,7 +981,7 @@ class Fir2IrDeclarationStorage(
// Some temporary variables are produced in RawFirBuilder, but we consistently use special names for them.
val origin = when {
givenOrigin != null -> givenOrigin
variable.name == Name.special("<iterator>") -> IrDeclarationOrigin.FOR_LOOP_ITERATOR
variable.name == SpecialNames.ITERATOR -> IrDeclarationOrigin.FOR_LOOP_ITERATOR
variable.name.isSpecial -> IrDeclarationOrigin.IR_TEMPORARY_VARIABLE
else -> IrDeclarationOrigin.DEFINED
}
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.isConst
import org.jetbrains.kotlin.ir.declarations.MetadataSource
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
sealed class FirMetadataSource : MetadataSource {
abstract val fir: FirDeclaration
@@ -19,7 +20,7 @@ sealed class FirMetadataSource : MetadataSource {
override val name: Name?
get() = when (val fir = fir) {
is FirConstructor -> Name.special("<init>")
is FirConstructor -> SpecialNames.INIT
is FirSimpleFunction -> fir.name
is FirRegularClass -> fir.name
is FirProperty -> fir.name
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.util.OperatorNameConventions
import kotlin.reflect.KProperty
@@ -744,7 +745,7 @@ class IrBuiltInsOverFir(
visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC,
build: IrConstructor.() -> Unit = {}
): IrConstructorSymbol {
val name = Name.special("<init>")
val name = SpecialNames.INIT
val signature =
IdSignature.CommonSignature(this.packageFqName!!.asString(), classId!!.relativeClassName.child(name).asString(), null, 0)
val ctor = irFactory.createConstructor(
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.utils.isExternal
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.declarations.utils.visibility
import org.jetbrains.kotlin.name.SpecialNames
class Fir2IrLazyConstructor(
components: Fir2IrComponents,
@@ -63,7 +64,7 @@ class Fir2IrLazyConstructor(
override var body: IrBody? = null
override val name: Name
get() = Name.special("<init>")
get() = SpecialNames.INIT
@Suppress("SetterBackingFieldAssignment")
override var visibility: DescriptorVisibility = components.visibilityConverter.convertToDescriptorVisibility(fir.visibility)
@@ -572,7 +572,7 @@ class DeclarationsConverter(
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitObjectLiteralExpression
*/
fun convertObjectLiteral(objectLiteral: LighterASTNode): FirElement {
return withChildClassName(ANONYMOUS_OBJECT_NAME, isExpect = false) {
return withChildClassName(SpecialNames.ANONYMOUS, isExpect = false) {
buildAnonymousObjectExpression {
val objectDeclaration = objectLiteral.getChildNodesByType(OBJECT_DECLARATION).first()
val sourceElement = objectDeclaration.toFirSourceElement()
@@ -729,7 +729,7 @@ class DeclarationsConverter(
)?.let { declarations += it.firConstructor }
classBodyNode?.also {
// Use ANONYMOUS_OBJECT_NAME for the owner class id of enum entry declarations
withChildClassName(ANONYMOUS_OBJECT_NAME, forceLocalContext = true, isExpect = false) {
withChildClassName(SpecialNames.ANONYMOUS, forceLocalContext = true, isExpect = false) {
declarations += convertClassBody(it, enumClassWrapper)
}
}
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.stubs.elements.KtConstantExpressionElementType
import org.jetbrains.kotlin.psi.stubs.elements.KtNameReferenceExpressionElementType
import org.jetbrains.kotlin.types.ConstantValueKind
@@ -152,7 +153,7 @@ class ExpressionsConverter(
for (valueParameter in valueParameterList) {
val multiDeclaration = valueParameter.destructuringDeclaration
valueParameters += if (multiDeclaration != null) {
val name = DESTRUCTURING_NAME
val name = SpecialNames.DESTRUCT
val multiParameter = buildValueParameter {
source = valueParameter.firValueParameter.source
moduleData = baseModuleData
@@ -1055,7 +1056,7 @@ class ExpressionsConverter(
val iteratorVal = generateTemporaryVariable(
baseModuleData,
calculatedRangeExpression.source?.fakeElement(FirFakeSourceElementKind.DesugaredForLoop),
ITERATOR_NAME,
SpecialNames.ITERATOR,
buildFunctionCall {
source = fakeSource
calleeReference = buildSimpleNamedReference {
@@ -1089,7 +1090,7 @@ class ExpressionsConverter(
val firLoopParameter = generateTemporaryVariable(
baseModuleData,
valueParameter.firValueParameter.source,
if (multiDeclaration != null) DESTRUCTURING_NAME else valueParameter.firValueParameter.name,
if (multiDeclaration != null) SpecialNames.DESTRUCT else valueParameter.firValueParameter.name,
buildFunctionCall {
source = fakeSource
calleeReference = buildSimpleNamedReference {
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection
import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes
@@ -882,7 +883,7 @@ open class RawFirBuilder(
typeParameters
)
// Use ANONYMOUS_OBJECT_NAME for the owner class id for enum entry declarations (see KT-42351)
withChildClassName(ANONYMOUS_OBJECT_NAME, forceLocalContext = true, isExpect = false) {
withChildClassName(SpecialNames.ANONYMOUS, forceLocalContext = true, isExpect = false) {
for (declaration in ktEnumEntry.declarations) {
declarations += declaration.toFirDeclaration(
correctedEnumSelfTypeRef,
@@ -1042,7 +1043,7 @@ open class RawFirBuilder(
override fun visitObjectLiteralExpression(expression: KtObjectLiteralExpression, data: Unit): FirElement {
val objectDeclaration = expression.objectDeclaration
return withChildClassName(ANONYMOUS_OBJECT_NAME, forceLocalContext = true, isExpect = false) {
return withChildClassName(SpecialNames.ANONYMOUS, forceLocalContext = true, isExpect = false) {
buildAnonymousObjectExpression {
val sourceElement = objectDeclaration.toFirSourceElement()
source = sourceElement
@@ -1233,7 +1234,7 @@ open class RawFirBuilder(
for (valueParameter in literal.valueParameters) {
val multiDeclaration = valueParameter.destructuringDeclaration
valueParameters += if (multiDeclaration != null) {
val name = DESTRUCTURING_NAME
val name = SpecialNames.DESTRUCT
val multiParameter = buildValueParameter {
source = valueParameter.toFirSourceElement()
moduleData = baseModuleData
@@ -1890,7 +1891,7 @@ open class RawFirBuilder(
source = fakeSource
val rangeSource = expression.loopRange?.toFirSourceElement(FirFakeSourceElementKind.DesugaredForLoop)
val iteratorVal = generateTemporaryVariable(
baseModuleData, rangeSource, ITERATOR_NAME,
baseModuleData, rangeSource, SpecialNames.ITERATOR,
buildFunctionCall {
source = fakeSource
calleeReference = buildSimpleNamedReference {
@@ -1928,7 +1929,7 @@ open class RawFirBuilder(
val multiDeclaration = ktParameter.destructuringDeclaration
val firLoopParameter = generateTemporaryVariable(
moduleData = baseModuleData, source = expression.loopParameter?.toFirSourceElement(),
name = if (multiDeclaration != null) DESTRUCTURING_NAME else ktParameter.nameAsSafeName,
name = if (multiDeclaration != null) SpecialNames.DESTRUCT else ktParameter.nameAsSafeName,
initializer = buildFunctionCall {
source = fakeSource
calleeReference = buildSimpleNamedReference {
@@ -112,7 +112,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
fun callableIdForName(name: Name) =
when {
context.className.shortNameOrSpecial() == ANONYMOUS_OBJECT_NAME -> CallableId(ANONYMOUS_CLASS_ID, name)
context.className.shortNameOrSpecial() == SpecialNames.ANONYMOUS -> CallableId(ANONYMOUS_CLASS_ID, name)
context.className.isRoot && !context.inLocalContext -> CallableId(context.packageFqName, name)
context.inLocalContext -> {
val pathFqName =
@@ -491,7 +491,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
val initialValueVar = generateTemporaryVariable(
baseModuleData,
desugaredSource,
Name.special("<unary>"),
SpecialNames.UNARY,
unwrappedArgument.convert()
)
@@ -629,7 +629,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
val initialValueVar = generateTemporaryVariable(
baseModuleData,
desugaredSource,
Name.special("<unary>"),
SpecialNames.UNARY,
firArgument
)
@@ -769,7 +769,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
val initialValueVar = generateTemporaryVariable(
baseModuleData,
desugaredSource,
Name.special("<unary>"),
SpecialNames.UNARY,
firArgument
)
@@ -1245,15 +1245,6 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
}
}
/**** Common utils ****/
companion object {
val ANONYMOUS_OBJECT_NAME = Name.special("<anonymous>")
val DESTRUCTURING_NAME = Name.special("<destruct>")
val ITERATOR_NAME = Name.special("<iterator>")
}
enum class ValueParameterDeclaration {
OTHER,
LAMBDA,
@@ -555,4 +555,4 @@ data class CalleeAndReceiver(
val reference: FirNamedReference,
val receiverExpression: FirExpression? = null,
val isImplicitInvoke: Boolean = false
)
)
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildStarProjection
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
@@ -423,7 +424,7 @@ class FirCallResolver(
delegatedConstructorCall: FirDelegatedConstructorCall,
constructedType: ConeClassLikeType
): FirDelegatedConstructorCall {
val name = Name.special("<init>")
val name = SpecialNames.INIT
val symbol = constructedType.lookupTag.toSymbol(components.session)
val typeArguments =
constructedType.typeArguments.take((symbol?.fir as? FirRegularClass)?.typeParameters?.count { it is FirTypeParameter } ?: 0)
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) : FirPartialBodyResolveTransformer(transformer) {
private val statusResolver: FirStatusResolver = FirStatusResolver(session, scopeSession)
@@ -10,12 +10,12 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.isSynthetic
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedForCalls
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.getContainingClassifierNamesIfPresent
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
class FirClassDeclaredMemberScope(
val useSiteSession: FirSession,
@@ -35,7 +35,7 @@ class FirClassDeclaredMemberScope(
loop@ for (declaration in klass.declarations) {
if (declaration is FirCallableDeclaration) {
val name = when (declaration) {
is FirConstructor -> CONSTRUCTOR_NAME
is FirConstructor -> SpecialNames.INIT
is FirVariable -> if (declaration.isSynthetic) continue@loop else declaration.name
is FirSimpleFunction -> declaration.name
else -> continue@loop
@@ -47,12 +47,12 @@ class FirClassDeclaredMemberScope(
}
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
if (name == CONSTRUCTOR_NAME) return
if (name == SpecialNames.INIT) return
processCallables(name, processor)
}
override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) {
processCallables(CONSTRUCTOR_NAME, processor)
processCallables(SpecialNames.INIT, processor)
}
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
@@ -86,6 +86,3 @@ class FirClassDeclaredMemberScope(
return nestedClassifierScope?.getContainingClassifierNamesIfPresent().orEmpty()
}
}
private val CONSTRUCTOR_NAME = Name.special("<init>")
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.name.Name
val NAME_FOR_BACKING_FIELD = Name.identifier("field")
val NAME_FOR_DEFAULT_VALUE_PARAMETER = Name.identifier("value")
val CONSTRUCTOR_NAME = Name.special("<init>")
// Data class synthetic members
val COPY_NAME = Name.identifier("copy")
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration>(
val classId: ClassId
@@ -68,7 +69,7 @@ class FirRegularClassSymbol(classId: ClassId) : FirClassSymbol<FirRegularClass>(
get() = fir.companionObject?.symbol
}
val ANONYMOUS_CLASS_ID = ClassId(FqName.ROOT, FqName.topLevel(Name.special("<anonymous>")), true)
val ANONYMOUS_CLASS_ID = ClassId(FqName.ROOT, FqName.topLevel(SpecialNames.ANONYMOUS), true)
class FirAnonymousObjectSymbol : FirClassSymbol<FirAnonymousObject>(ANONYMOUS_CLASS_ID)