FIR rename: FirType -> FirTypeRef and related

This commit is contained in:
Simon Ogorodnik
2019-02-11 16:13:04 +03:00
committed by Mikhail Glukhikh
parent 1c76a612f9
commit 5afb0a6f4a
71 changed files with 599 additions and 601 deletions
@@ -25,10 +25,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection
import org.jetbrains.kotlin.fir.types.FirResolvedType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.load.java.JavaClassFinder import org.jetbrains.kotlin.load.java.JavaClassFinder
import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.load.java.structure.*
@@ -49,7 +49,7 @@ class JavaSymbolProvider(
private fun JavaAnnotation.toFirAnnotationCall(): FirAnnotationCall { private fun JavaAnnotation.toFirAnnotationCall(): FirAnnotationCall {
return FirAnnotationCallImpl( return FirAnnotationCallImpl(
session, psi = null, useSiteTarget = null, session, psi = null, useSiteTarget = null,
annotationType = FirResolvedTypeImpl( annotationTypeRef = FirResolvedTypeRefImpl(
session = session, session = session,
psi = null, psi = null,
type = ConeClassTypeImpl(FirClassSymbol(classId!!), emptyArray()), type = ConeClassTypeImpl(FirClassSymbol(classId!!), emptyArray()),
@@ -86,7 +86,7 @@ class JavaSymbolProvider(
} }
} }
private fun JavaClassifierType.toFirResolvedType(): FirResolvedType { private fun JavaClassifierType.toFirResolvedTypeRef(): FirResolvedTypeRef {
val coneType = when (val classifier = classifier) { val coneType = when (val classifier = classifier) {
is JavaClass -> { is JavaClass -> {
val symbol = session.service<FirSymbolProvider>().getClassLikeSymbolByFqName(classifier.classId!!) as ConeClassSymbol val symbol = session.service<FirSymbolProvider>().getClassLikeSymbolByFqName(classifier.classId!!) as ConeClassSymbol
@@ -100,15 +100,15 @@ class JavaSymbolProvider(
} }
else -> ConeClassErrorType(reason = "Unexpected classifier: $classifier") else -> ConeClassErrorType(reason = "Unexpected classifier: $classifier")
} }
return FirResolvedTypeImpl( return FirResolvedTypeRefImpl(
session, psi = null, type = coneType, session, psi = null, type = coneType,
isMarkedNullable = false, annotations = annotations.map { it.toFirAnnotationCall() } isMarkedNullable = false, annotations = annotations.map { it.toFirAnnotationCall() }
) )
} }
private fun JavaType.toFirResolvedType(): FirResolvedType { private fun JavaType.toFirResolvedTypeRef(): FirResolvedTypeRef {
if (this is JavaClassifierType) return toFirResolvedType() if (this is JavaClassifierType) return toFirResolvedTypeRef()
return FirResolvedTypeImpl( return FirResolvedTypeRefImpl(
session, psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"), session, psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"),
isMarkedNullable = false, annotations = emptyList() isMarkedNullable = false, annotations = emptyList()
) )
@@ -116,7 +116,7 @@ class JavaSymbolProvider(
private fun JavaType.toConeProjection(): ConeKotlinTypeProjection { private fun JavaType.toConeProjection(): ConeKotlinTypeProjection {
if (this is JavaClassifierType) { if (this is JavaClassifierType) {
return toFirResolvedType().type return toFirResolvedTypeRef().type
} }
return ConeClassErrorType("Unexpected type argument: $this") return ConeClassErrorType("Unexpected type argument: $this")
} }
@@ -154,7 +154,7 @@ class JavaSymbolProvider(
isExpect = false, isActual = false, isOverride = false, isExpect = false, isActual = false, isOverride = false,
isOperator = true, isInfix = false, isInline = false, isOperator = true, isInfix = false, isInline = false,
isTailRec = false, isExternal = false, isSuspend = false, isTailRec = false, isExternal = false, isSuspend = false,
receiverType = null, returnType = javaMethod.returnType.toFirResolvedType() receiverTypeRef = null, returnTypeRef = javaMethod.returnType.toFirResolvedTypeRef()
).apply { ).apply {
for (typeParameter in javaMethod.typeParameters) { for (typeParameter in javaMethod.typeParameters) {
typeParameters += createTypeParameterSymbol(typeParameter.name).fir typeParameters += createTypeParameterSymbol(typeParameter.name).fir
@@ -163,7 +163,7 @@ class JavaSymbolProvider(
for (valueParameter in javaMethod.valueParameters) { for (valueParameter in javaMethod.valueParameters) {
valueParameters += FirValueParameterImpl( valueParameters += FirValueParameterImpl(
session, null, valueParameter.name ?: Name.special("<anonymous Java parameter>"), session, null, valueParameter.name ?: Name.special("<anonymous Java parameter>"),
returnType = valueParameter.type.toFirResolvedType(), returnTypeRef = valueParameter.type.toFirResolvedTypeRef(),
defaultValue = null, isCrossinline = false, isNoinline = false, defaultValue = null, isCrossinline = false, isNoinline = false,
isVararg = valueParameter.isVararg isVararg = valueParameter.isVararg
) )
@@ -209,7 +209,7 @@ class JavaSymbolProvider(
} }
addAnnotationsFrom(javaClass) addAnnotationsFrom(javaClass)
for (supertype in javaClass.supertypes) { for (supertype in javaClass.supertypes) {
superTypes += supertype.toFirResolvedType() superTypeRefs += supertype.toFirResolvedTypeRef()
} }
} }
} }
@@ -17,8 +17,8 @@ import org.jetbrains.kotlin.fir.expressions.impl.*
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -263,7 +263,7 @@ internal fun generateDestructuringBlock(
multiDeclaration: KtDestructuringDeclaration, multiDeclaration: KtDestructuringDeclaration,
container: FirNamedDeclaration, container: FirNamedDeclaration,
extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit, extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit,
toFirOrImplicitType: KtTypeReference?.() -> FirType toFirOrImplicitTypeRef: KtTypeReference?.() -> FirTypeRef
): FirExpression { ): FirExpression {
return FirBlockImpl(session, multiDeclaration).apply { return FirBlockImpl(session, multiDeclaration).apply {
if (container is FirVariable) { if (container is FirVariable) {
@@ -273,7 +273,7 @@ internal fun generateDestructuringBlock(
for ((index, entry) in multiDeclaration.entries.withIndex()) { for ((index, entry) in multiDeclaration.entries.withIndex()) {
statements += FirVariableImpl( statements += FirVariableImpl(
session, entry, entry.nameAsSafeName, session, entry, entry.nameAsSafeName,
entry.typeReference.toFirOrImplicitType(), isVar, entry.typeReference.toFirOrImplicitTypeRef(), isVar,
FirComponentCallImpl(session, entry, index + 1).apply { FirComponentCallImpl(session, entry, index + 1).apply {
arguments += generateAccessExpression(session, entry, container.name) arguments += generateAccessExpression(session, entry, container.name)
} }
@@ -286,7 +286,7 @@ internal fun generateDestructuringBlock(
internal fun generateTemporaryVariable( internal fun generateTemporaryVariable(
session: FirSession, psi: PsiElement?, name: Name, initializer: FirExpression session: FirSession, psi: PsiElement?, name: Name, initializer: FirExpression
): FirVariable = FirVariableImpl(session, psi, name, FirImplicitTypeImpl(session, psi), false, initializer) ): FirVariable = FirVariableImpl(session, psi, name, FirImplicitTypeRefImpl(session, psi), false, initializer)
internal fun generateTemporaryVariable( internal fun generateTemporaryVariable(
session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.*
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
@@ -41,11 +41,11 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
private val implicitUnitType = FirImplicitUnitType(session, null) private val implicitUnitType = FirImplicitUnitTypeRef(session, null)
private val implicitAnyType = FirImplicitAnyType(session, null) private val implicitAnyType = FirImplicitAnyTypeRef(session, null)
private val implicitEnumType = FirImplicitEnumType(session, null) private val implicitEnumType = FirImplicitEnumTypeRef(session, null)
fun buildFirFile(file: KtFile): FirFile { fun buildFirFile(file: KtFile): FirFile {
return file.accept(Visitor(), Unit) as FirFile return file.accept(Visitor(), Unit) as FirFile
@@ -80,14 +80,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
private inline fun <reified R : FirElement> KtElement.convert(): R = private inline fun <reified R : FirElement> KtElement.convert(): R =
this.accept(this@Visitor, Unit) as R this.accept(this@Visitor, Unit) as R
private fun KtTypeReference?.toFirOrImplicitType(): FirType = private fun KtTypeReference?.toFirOrImplicitType(): FirTypeRef =
convertSafe() ?: FirImplicitTypeImpl(session, this) convertSafe() ?: FirImplicitTypeRefImpl(session, this)
private fun KtTypeReference?.toFirOrUnitType(): FirType = private fun KtTypeReference?.toFirOrUnitType(): FirTypeRef =
convertSafe() ?: implicitUnitType convertSafe() ?: implicitUnitType
private fun KtTypeReference?.toFirOrErrorType(): FirType = private fun KtTypeReference?.toFirOrErrorType(): FirTypeRef =
convertSafe() ?: FirErrorTypeImpl(session, this, if (this == null) "Incomplete code" else "Conversion failed") convertSafe() ?: FirErrorTypeRefImpl(session, this, if (this == null) "Incomplete code" else "Conversion failed")
// Here we accept lambda as receiver to prevent expression calculation in stub mode // Here we accept lambda as receiver to prevent expression calculation in stub mode
private fun (() -> KtExpression?).toFirExpression(errorReason: String): FirExpression = private fun (() -> KtExpression?).toFirExpression(errorReason: String): FirExpression =
@@ -190,14 +190,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
private fun KtPropertyAccessor?.toFirPropertyAccessor( private fun KtPropertyAccessor?.toFirPropertyAccessor(
property: KtProperty, property: KtProperty,
propertyType: FirType, propertyTypeRef: FirTypeRef,
isGetter: Boolean isGetter: Boolean
): FirPropertyAccessor { ): FirPropertyAccessor {
if (this == null) { if (this == null) {
return if (isGetter) { return if (isGetter) {
FirDefaultPropertyGetter(session, property, propertyType, property.visibility) FirDefaultPropertyGetter(session, property, propertyTypeRef, property.visibility)
} else { } else {
FirDefaultPropertySetter(session, property, propertyType, property.visibility) FirDefaultPropertySetter(session, property, propertyTypeRef, property.visibility)
} }
} }
val firAccessor = FirPropertyAccessorImpl( val firAccessor = FirPropertyAccessorImpl(
@@ -206,30 +206,30 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
isGetter, isGetter,
visibility, visibility,
if (isGetter) { if (isGetter) {
returnTypeReference?.convertSafe() ?: propertyType returnTypeReference?.convertSafe() ?: propertyTypeRef
} else { } else {
returnTypeReference.toFirOrUnitType() returnTypeReference.toFirOrUnitType()
} }
) )
firFunctions += firAccessor firFunctions += firAccessor
extractAnnotationsTo(firAccessor) extractAnnotationsTo(firAccessor)
extractValueParametersTo(firAccessor, propertyType) extractValueParametersTo(firAccessor, propertyTypeRef)
if (!isGetter && firAccessor.valueParameters.isEmpty()) { if (!isGetter && firAccessor.valueParameters.isEmpty()) {
firAccessor.valueParameters += FirDefaultSetterValueParameter(session, this, propertyType) firAccessor.valueParameters += FirDefaultSetterValueParameter(session, this, propertyTypeRef)
} }
firAccessor.body = this.buildFirBody() firAccessor.body = this.buildFirBody()
firFunctions.removeLast() firFunctions.removeLast()
return firAccessor return firAccessor
} }
private fun KtParameter.toFirValueParameter(defaultType: FirType? = null): FirValueParameter { private fun KtParameter.toFirValueParameter(defaultTypeRef: FirTypeRef? = null): FirValueParameter {
val firValueParameter = FirValueParameterImpl( val firValueParameter = FirValueParameterImpl(
session, session,
this, this,
nameAsSafeName, nameAsSafeName,
when { when {
typeReference != null -> typeReference.toFirOrErrorType() typeReference != null -> typeReference.toFirOrErrorType()
defaultType != null -> defaultType defaultTypeRef != null -> defaultTypeRef
else -> null.toFirOrErrorType() else -> null.toFirOrErrorType()
}, },
if (hasDefaultValue()) { if (hasDefaultValue()) {
@@ -258,8 +258,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
isOverride = hasModifier(KtTokens.OVERRIDE_KEYWORD), isOverride = hasModifier(KtTokens.OVERRIDE_KEYWORD),
isConst = false, isConst = false,
isLateInit = false, isLateInit = false,
receiverType = null, receiverTypeRef = null,
returnType = type, returnTypeRef = type,
isVar = isMutable, isVar = isMutable,
initializer = null, initializer = null,
getter = FirDefaultPropertyGetter(session, this, type, visibility), getter = FirDefaultPropertyGetter(session, this, type, visibility),
@@ -284,10 +284,10 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
private fun KtDeclarationWithBody.extractValueParametersTo( private fun KtDeclarationWithBody.extractValueParametersTo(
container: FirFunction, container: FirFunction,
defaultType: FirType? = null defaultTypeRef: FirTypeRef? = null
) { ) {
for (valueParameter in valueParameters) { for (valueParameter in valueParameters) {
(container.valueParameters as MutableList<FirValueParameter>) += valueParameter.toFirValueParameter(defaultType) (container.valueParameters as MutableList<FirValueParameter>) += valueParameter.toFirValueParameter(defaultTypeRef)
} }
} }
@@ -298,58 +298,58 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
} }
private fun KtClassOrObject.extractSuperTypeListEntriesTo( private fun KtClassOrObject.extractSuperTypeListEntriesTo(
container: FirModifiableClass, delegatedSelfType: FirType container: FirModifiableClass, delegatedSelfTypeRef: FirTypeRef
): FirType? { ): FirTypeRef? {
var superTypeCallEntry: KtSuperTypeCallEntry? = null var superTypeCallEntry: KtSuperTypeCallEntry? = null
var delegatedSuperType: FirType? = null var delegatedSuperTypeRef: FirTypeRef? = null
for (superTypeListEntry in superTypeListEntries) { for (superTypeListEntry in superTypeListEntries) {
when (superTypeListEntry) { when (superTypeListEntry) {
is KtSuperTypeEntry -> { is KtSuperTypeEntry -> {
container.superTypes += superTypeListEntry.typeReference.toFirOrErrorType() container.superTypeRefs += superTypeListEntry.typeReference.toFirOrErrorType()
} }
is KtSuperTypeCallEntry -> { is KtSuperTypeCallEntry -> {
delegatedSuperType = superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType() delegatedSuperTypeRef = superTypeListEntry.calleeExpression.typeReference.toFirOrErrorType()
container.superTypes += delegatedSuperType container.superTypeRefs += delegatedSuperTypeRef
superTypeCallEntry = superTypeListEntry superTypeCallEntry = superTypeListEntry
} }
is KtDelegatedSuperTypeEntry -> { is KtDelegatedSuperTypeEntry -> {
val type = superTypeListEntry.typeReference.toFirOrErrorType() val type = superTypeListEntry.typeReference.toFirOrErrorType()
container.superTypes += FirDelegatedTypeImpl( container.superTypeRefs += FirDelegatedTypeRefImpl(
type, type,
{ superTypeListEntry.delegateExpression }.toFirExpression("Should have delegate") { superTypeListEntry.delegateExpression }.toFirExpression("Should have delegate")
) )
} }
} }
} }
if (this is KtClass && this.isInterface()) return delegatedSuperType if (this is KtClass && this.isInterface()) return delegatedSuperTypeRef
fun isEnum() = this is KtClass && this.isEnum() fun isEnum() = this is KtClass && this.isEnum()
// TODO: in case we have no primary constructor, // TODO: in case we have no primary constructor,
// it may be not possible to determine delegated super type right here // it may be not possible to determine delegated super type right here
delegatedSuperType = delegatedSuperType ?: (if (isEnum()) implicitEnumType else implicitAnyType) delegatedSuperTypeRef = delegatedSuperTypeRef ?: (if (isEnum()) implicitEnumType else implicitAnyType)
if (!this.hasPrimaryConstructor()) return delegatedSuperType if (!this.hasPrimaryConstructor()) return delegatedSuperTypeRef
val firPrimaryConstructor = primaryConstructor.toFirConstructor( val firPrimaryConstructor = primaryConstructor.toFirConstructor(
superTypeCallEntry, superTypeCallEntry,
delegatedSuperType, delegatedSuperTypeRef,
delegatedSelfType, delegatedSelfTypeRef,
owner = this owner = this
) )
container.declarations += firPrimaryConstructor container.declarations += firPrimaryConstructor
return delegatedSuperType return delegatedSuperTypeRef
} }
private fun KtPrimaryConstructor?.toFirConstructor( private fun KtPrimaryConstructor?.toFirConstructor(
superTypeCallEntry: KtSuperTypeCallEntry?, superTypeCallEntry: KtSuperTypeCallEntry?,
delegatedSuperType: FirType, delegatedSuperTypeRef: FirTypeRef,
delegatedSelfType: FirType, delegatedSelfTypeRef: FirTypeRef,
owner: KtClassOrObject owner: KtClassOrObject
): FirConstructor { ): FirConstructor {
val constructorCallee = superTypeCallEntry?.calleeExpression val constructorCallee = superTypeCallEntry?.calleeExpression
val firDelegatedCall = FirDelegatedConstructorCallImpl( val firDelegatedCall = FirDelegatedConstructorCallImpl(
session, session,
constructorCallee ?: (this ?: owner), constructorCallee ?: (this ?: owner),
delegatedSuperType, delegatedSuperTypeRef,
isThis = false isThis = false
).apply { ).apply {
if (!stubMode) { if (!stubMode) {
@@ -363,7 +363,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
this?.visibility ?: Visibilities.UNKNOWN, this?.visibility ?: Visibilities.UNKNOWN,
this?.hasExpectModifier() ?: false, this?.hasExpectModifier() ?: false,
this?.hasActualModifier() ?: false, this?.hasActualModifier() ?: false,
delegatedSelfType, delegatedSelfTypeRef,
firDelegatedCall firDelegatedCall
) )
this?.extractAnnotationsTo(firConstructor) this?.extractAnnotationsTo(firConstructor)
@@ -394,8 +394,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
return firFile return firFile
} }
private fun KtClassOrObject.toDelegatedSelfType(): FirType = private fun KtClassOrObject.toDelegatedSelfType(): FirTypeRef =
FirUserTypeImpl(session, this, isNullable = false).apply { FirUserTypeRefImpl(session, this, isNullable = false).apply {
qualifier.add(FirQualifierPartImpl(nameAsSafeName)) qualifier.add(FirQualifierPartImpl(nameAsSafeName))
} }
@@ -548,7 +548,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
} else { } else {
typeReference.toFirOrImplicitType() typeReference.toFirOrImplicitType()
} }
val receiverType = function.receiverTypeReference.convertSafe<FirType>() val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>()
val firFunction = if (function.name == null) { val firFunction = if (function.name == null) {
FirAnonymousFunctionImpl(session, function, returnType, receiverType) FirAnonymousFunctionImpl(session, function, returnType, receiverType)
} else { } else {
@@ -587,8 +587,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
override fun visitLambdaExpression(expression: KtLambdaExpression, data: Unit): FirElement { override fun visitLambdaExpression(expression: KtLambdaExpression, data: Unit): FirElement {
val literal = expression.functionLiteral val literal = expression.functionLiteral
val returnType = FirImplicitTypeImpl(session, literal) val returnType = FirImplicitTypeRefImpl(session, literal)
val receiverType = FirImplicitTypeImpl(session, literal) val receiverType = FirImplicitTypeRefImpl(session, literal)
return FirAnonymousFunctionImpl(session, literal, returnType, receiverType).apply { return FirAnonymousFunctionImpl(session, literal, returnType, receiverType).apply {
firFunctions += this firFunctions += this
var destructuringBlock: FirExpression? = null var destructuringBlock: FirExpression? = null
@@ -597,7 +597,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
valueParameters += if (multiDeclaration != null) { valueParameters += if (multiDeclaration != null) {
val multiParameter = FirValueParameterImpl( val multiParameter = FirValueParameterImpl(
session, valueParameter, Name.special("<destruct>"), session, valueParameter, Name.special("<destruct>"),
FirImplicitTypeImpl(session, multiDeclaration), FirImplicitTypeRefImpl(session, multiDeclaration),
defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false
) )
destructuringBlock = generateDestructuringBlock( destructuringBlock = generateDestructuringBlock(
@@ -624,8 +624,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
} }
private fun KtSecondaryConstructor.toFirConstructor( private fun KtSecondaryConstructor.toFirConstructor(
delegatedSuperType: FirType?, delegatedSuperTypeRef: FirTypeRef?,
delegatedSelfType: FirType, delegatedSelfTypeRef: FirTypeRef,
hasPrimaryConstructor: Boolean hasPrimaryConstructor: Boolean
): FirConstructor { ): FirConstructor {
val firConstructor = FirConstructorImpl( val firConstructor = FirConstructorImpl(
@@ -635,8 +635,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
visibility, visibility,
hasExpectModifier(), hasExpectModifier(),
hasActualModifier(), hasActualModifier(),
delegatedSelfType, delegatedSelfTypeRef,
getDelegationCall().convert(delegatedSuperType, delegatedSelfType, hasPrimaryConstructor) getDelegationCall().convert(delegatedSuperTypeRef, delegatedSelfTypeRef, hasPrimaryConstructor)
) )
firFunctions += firConstructor firFunctions += firConstructor
extractAnnotationsTo(firConstructor) extractAnnotationsTo(firConstructor)
@@ -647,14 +647,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
} }
private fun KtConstructorDelegationCall.convert( private fun KtConstructorDelegationCall.convert(
delegatedSuperType: FirType?, delegatedSuperTypeRef: FirTypeRef?,
delegatedSelfType: FirType, delegatedSelfTypeRef: FirTypeRef,
hasPrimaryConstructor: Boolean hasPrimaryConstructor: Boolean
): FirDelegatedConstructorCall { ): FirDelegatedConstructorCall {
val isThis = isCallToThis || (isImplicit && hasPrimaryConstructor) val isThis = isCallToThis || (isImplicit && hasPrimaryConstructor)
val delegatedType = when { val delegatedType = when {
isThis -> delegatedSelfType isThis -> delegatedSelfTypeRef
else -> delegatedSuperType ?: FirErrorTypeImpl(session, this, "No super type") else -> delegatedSuperTypeRef ?: FirErrorTypeRefImpl(session, this, "No super type")
} }
return FirDelegatedConstructorCallImpl( return FirDelegatedConstructorCallImpl(
session, session,
@@ -732,11 +732,11 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
val unwrappedElement = typeElement.unwrapNullable() val unwrappedElement = typeElement.unwrapNullable()
val firType = when (unwrappedElement) { val firType = when (unwrappedElement) {
is KtDynamicType -> FirDynamicTypeImpl(session, typeReference, isNullable) is KtDynamicType -> FirDynamicTypeRefImpl(session, typeReference, isNullable)
is KtUserType -> { is KtUserType -> {
var referenceExpression = unwrappedElement.referenceExpression var referenceExpression = unwrappedElement.referenceExpression
if (referenceExpression != null) { if (referenceExpression != null) {
val userType = FirUserTypeImpl( val userType = FirUserTypeRefImpl(
session, typeReference, isNullable session, typeReference, isNullable
) )
var qualifier: KtUserType? = unwrappedElement var qualifier: KtUserType? = unwrappedElement
@@ -755,11 +755,11 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
userType userType
} else { } else {
FirErrorTypeImpl(session, typeReference, "Incomplete user type") FirErrorTypeRefImpl(session, typeReference, "Incomplete user type")
} }
} }
is KtFunctionType -> { is KtFunctionType -> {
val functionType = FirFunctionTypeImpl( val functionType = FirFunctionTypeRefImpl(
session, session,
typeReference, typeReference,
isNullable, isNullable,
@@ -772,7 +772,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
} }
functionType functionType
} }
null -> FirErrorTypeImpl(session, typeReference, "Unwrapped type is null") null -> FirErrorTypeRefImpl(session, typeReference, "Unwrapped type is null")
else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}") else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}")
} }
@@ -806,7 +806,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
parameter.extractAnnotationsTo(firTypeParameter) parameter.extractAnnotationsTo(firTypeParameter)
val extendsBound = parameter.extendsBound val extendsBound = parameter.extendsBound
if (extendsBound != null) { if (extendsBound != null) {
firTypeParameter.bounds += extendsBound.convert<FirType>() firTypeParameter.bounds += extendsBound.convert<FirTypeRef>()
} }
val owner = parameter.getStrictParentOfType<KtTypeParameterListOwner>() ?: return firTypeParameter val owner = parameter.getStrictParentOfType<KtTypeParameterListOwner>() ?: return firTypeParameter
for (typeConstraint in owner.typeConstraints) { for (typeConstraint in owner.typeConstraints) {
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.FirSessionBase import org.jetbrains.kotlin.fir.FirSessionBase
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
@@ -126,7 +126,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
override fun visitElement(element: FirElement) { override fun visitElement(element: FirElement) {
// NB: types are reused sometimes (e.g. in accessors) // NB: types are reused sometimes (e.g. in accessors)
if (!result.add(element)) { if (!result.add(element)) {
if (element !is FirType) { if (element !is FirTypeRef) {
val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString() val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString()
throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump") throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump")
} }
@@ -141,7 +141,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
override fun <E : FirElement> transformElement(element: E, data: Unit): CompositeTransformResult<E> { override fun <E : FirElement> transformElement(element: E, data: Unit): CompositeTransformResult<E> {
if (!result.add(element)) { if (!result.add(element)) {
if (element !is FirType) { if (element !is FirTypeRef) {
val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString() val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString()
throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump") throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump")
} }
@@ -10,18 +10,18 @@ import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.service import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.ConeSymbol import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirUserType import org.jetbrains.kotlin.fir.types.FirUserTypeRef
interface FirTypeResolver { interface FirTypeResolver {
fun resolveType(type: FirType, scope: FirScope, position: FirPosition): ConeKotlinType fun resolveType(typeRef: FirTypeRef, scope: FirScope, position: FirPosition): ConeKotlinType
fun resolveToSymbol(type: FirType, scope: FirScope, position: FirPosition): ConeSymbol? fun resolveToSymbol(typeRef: FirTypeRef, scope: FirScope, position: FirPosition): ConeSymbol?
companion object { companion object {
fun getInstance(session: FirSession): FirTypeResolver = session.service() fun getInstance(session: FirSession): FirTypeResolver = session.service()
} }
fun resolveUserType(type: FirUserType, symbol: ConeSymbol?, scope: FirScope): ConeKotlinType fun resolveUserType(typeRef: FirUserTypeRef, symbol: ConeSymbol?, scope: FirScope): ConeKotlinType
} }
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.symbols.impl.FictitiousFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FictitiousFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
import org.jetbrains.kotlin.metadata.deserialization.Flags import org.jetbrains.kotlin.metadata.deserialization.Flags
@@ -112,9 +112,9 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider
typeDeserializer.classLikeType(supertypeProto) typeDeserializer.classLikeType(supertypeProto)
}// TODO: + c.components.additionalClassPartsProvider.getSupertypes(this@DeserializedClassDescriptor) }// TODO: + c.components.additionalClassPartsProvider.getSupertypes(this@DeserializedClassDescriptor)
superTypesDeserialized.mapNotNullTo(superTypes) { superTypesDeserialized.mapNotNullTo(superTypeRefs) {
if (it == null) return@mapNotNullTo null if (it == null) return@mapNotNullTo null
FirResolvedTypeImpl(session, null, it, false, emptyList()) FirResolvedTypeRefImpl(session, null, it, false, emptyList())
} }
// TODO: declarations (probably should be done later) // TODO: declarations (probably should be done later)
} }
@@ -26,7 +26,7 @@ class FirTypeResolverImpl : FirTypeResolver {
when (it) { when (it) {
is FirStarProjection -> StarProjection is FirStarProjection -> StarProjection
is FirTypeProjectionWithVariance -> { is FirTypeProjectionWithVariance -> {
val type = (it.type as FirResolvedType).type val type = (it.typeRef as FirResolvedTypeRef).type
when (it.variance) { when (it.variance) {
Variance.INVARIANT -> type Variance.INVARIANT -> type
Variance.IN_VARIANCE -> ConeKotlinTypeProjectionIn(type) Variance.IN_VARIANCE -> ConeKotlinTypeProjectionIn(type)
@@ -63,28 +63,28 @@ class FirTypeResolverImpl : FirTypeResolver {
private val implicitBuiltinTypeSymbols = mutableMapOf<NameInSession, ConeSymbol>() private val implicitBuiltinTypeSymbols = mutableMapOf<NameInSession, ConeSymbol>()
override fun resolveToSymbol( override fun resolveToSymbol(
type: FirType, typeRef: FirTypeRef,
scope: FirScope, scope: FirScope,
position: FirPosition position: FirPosition
): ConeSymbol? { ): ConeSymbol? {
return when (type) { return when (typeRef) {
is FirResolvedType -> type.coneTypeSafe<ConeSymbolBasedType>()?.symbol is FirResolvedTypeRef -> typeRef.coneTypeSafe<ConeSymbolBasedType>()?.symbol
is FirUserType -> { is FirUserTypeRef -> {
val qualifierResolver = FirQualifierResolver.getInstance(type.session) val qualifierResolver = FirQualifierResolver.getInstance(typeRef.session)
var resolvedSymbol: ConeSymbol? = null var resolvedSymbol: ConeSymbol? = null
scope.processClassifiersByName(type.qualifier.first().name, position) { symbol -> scope.processClassifiersByName(typeRef.qualifier.first().name, position) { symbol ->
resolvedSymbol = when (symbol) { resolvedSymbol = when (symbol) {
is ConeClassLikeSymbol -> { is ConeClassLikeSymbol -> {
if (type.qualifier.size == 1) { if (typeRef.qualifier.size == 1) {
symbol symbol
} else { } else {
qualifierResolver.resolveSymbolWithPrefix(type.qualifier, symbol.classId) qualifierResolver.resolveSymbolWithPrefix(typeRef.qualifier, symbol.classId)
} }
} }
is ConeTypeParameterSymbol -> { is ConeTypeParameterSymbol -> {
assert(type.qualifier.size == 1) assert(typeRef.qualifier.size == 1)
symbol symbol
} }
else -> error("!") else -> error("!")
@@ -93,13 +93,13 @@ class FirTypeResolverImpl : FirTypeResolver {
} }
// TODO: Imports // TODO: Imports
resolvedSymbol ?: qualifierResolver.resolveSymbol(type.qualifier) resolvedSymbol ?: qualifierResolver.resolveSymbol(typeRef.qualifier)
} }
is FirImplicitBuiltinType -> { is FirImplicitBuiltinTypeRef -> {
val nameInSession = NameInSession(type.session, type.name) val nameInSession = NameInSession(typeRef.session, typeRef.name)
implicitBuiltinTypeSymbols[nameInSession] ?: run { implicitBuiltinTypeSymbols[nameInSession] ?: run {
var resolvedSymbol: ConeSymbol? = null var resolvedSymbol: ConeSymbol? = null
scope.processClassifiersByName(type.name, position) { scope.processClassifiersByName(typeRef.name, position) {
resolvedSymbol = (it as ConeClassLikeSymbol) resolvedSymbol = (it as ConeClassLikeSymbol)
resolvedSymbol == null resolvedSymbol == null
} }
@@ -111,36 +111,36 @@ class FirTypeResolverImpl : FirTypeResolver {
} }
} }
override fun resolveUserType(type: FirUserType, symbol: ConeSymbol?, scope: FirScope): ConeKotlinType { override fun resolveUserType(typeRef: FirUserTypeRef, symbol: ConeSymbol?, scope: FirScope): ConeKotlinType {
symbol ?: return ConeKotlinErrorType("Symbol not found") symbol ?: return ConeKotlinErrorType("Symbol not found")
return symbol.toConeKotlinType(type.qualifier) ?: ConeKotlinErrorType("Failed to resolve qualified type") return symbol.toConeKotlinType(typeRef.qualifier) ?: ConeKotlinErrorType("Failed to resolve qualified type")
} }
override fun resolveType( override fun resolveType(
type: FirType, typeRef: FirTypeRef,
scope: FirScope, scope: FirScope,
position: FirPosition position: FirPosition
): ConeKotlinType { ): ConeKotlinType {
return when (type) { return when (typeRef) {
is FirResolvedType -> type.type is FirResolvedTypeRef -> typeRef.type
is FirUserType -> { is FirUserTypeRef -> {
resolveUserType(type, resolveToSymbol(type, scope, position), scope) resolveUserType(typeRef, resolveToSymbol(typeRef, scope, position), scope)
} }
is FirErrorType -> { is FirErrorTypeRef -> {
ConeKotlinErrorType(type.reason) ConeKotlinErrorType(typeRef.reason)
} }
is FirFunctionType -> { is FirFunctionTypeRef -> {
ConeFunctionTypeImpl( ConeFunctionTypeImpl(
(type.receiverType as FirResolvedType?)?.type, (typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type,
type.valueParameters.map { it.returnType.coneTypeUnsafe<ConeKotlinType>() }, typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe<ConeKotlinType>() },
type.returnType.coneTypeUnsafe() typeRef.returnTypeRef.coneTypeUnsafe()
) )
} }
is FirImplicitBuiltinType -> { is FirImplicitBuiltinTypeRef -> {
resolveToSymbol(type, scope, position)!!.toConeKotlinType(emptyList())!! resolveToSymbol(typeRef, scope, position)!!.toConeKotlinType(emptyList())!!
} }
is FirDynamicType, is FirImplicitType, is FirDelegatedType -> { is FirDynamicTypeRef, is FirImplicitTypeRef, is FirDelegatedTypeRef -> {
ConeKotlinErrorType("Not supported: ${type::class.simpleName}") ConeKotlinErrorType("Not supported: ${typeRef::class.simpleName}")
} }
else -> error("!") else -> error("!")
} }
@@ -19,9 +19,9 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedFunctionTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedFunctionTypeRefImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.compose import org.jetbrains.kotlin.fir.visitors.compose
@@ -109,39 +109,39 @@ open class FirTypeResolveTransformer(
} }
} }
override fun transformType(type: FirType, data: Nothing?): CompositeTransformResult<FirType> { override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
val typeResolver = FirTypeResolver.getInstance(type.session) val typeResolver = FirTypeResolver.getInstance(typeRef.session)
type.transformChildren(this, null) typeRef.transformChildren(this, null)
return transformType(type, typeResolver.resolveType(type, towerScope, position = FirPosition.OTHER)) return transformType(typeRef, typeResolver.resolveType(typeRef, towerScope, position = FirPosition.OTHER))
} }
override fun transformFunctionType(functionType: FirFunctionType, data: Nothing?): CompositeTransformResult<FirType> { override fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
val typeResolver = FirTypeResolver.getInstance(functionType.session) val typeResolver = FirTypeResolver.getInstance(functionTypeRef.session)
functionType.transformChildren(this, data) functionTypeRef.transformChildren(this, data)
return FirResolvedFunctionTypeImpl( return FirResolvedFunctionTypeRefImpl(
functionType.psi, functionTypeRef.psi,
functionType.session, functionTypeRef.session,
functionType.isMarkedNullable, functionTypeRef.isMarkedNullable,
functionType.annotations as MutableList<FirAnnotationCall>, functionTypeRef.annotations as MutableList<FirAnnotationCall>,
functionType.receiverType, functionTypeRef.receiverTypeRef,
functionType.valueParameters as MutableList<FirValueParameter>, functionTypeRef.valueParameters as MutableList<FirValueParameter>,
functionType.returnType, functionTypeRef.returnTypeRef,
typeResolver.resolveType(functionType, towerScope, FirPosition.OTHER) typeResolver.resolveType(functionTypeRef, towerScope, FirPosition.OTHER)
).compose() ).compose()
} }
private fun transformType(type: FirType, resolvedType: ConeKotlinType): CompositeTransformResult<FirType> { private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> {
return FirResolvedTypeImpl( return FirResolvedTypeRefImpl(
type.session, typeRef.session,
type.psi, typeRef.psi,
resolvedType, resolvedType,
false, false,
type.annotations typeRef.annotations
).compose() ).compose()
} }
override fun transformResolvedType(resolvedType: FirResolvedType, data: Nothing?): CompositeTransformResult<FirType> { override fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
return resolvedType.compose() return resolvedTypeRef.compose()
} }
override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult<FirDeclaration> { override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult<FirDeclaration> {
@@ -180,10 +180,10 @@ open class FirTypeResolveTransformer(
if (symbol is ConeTypeAliasSymbol) { if (symbol is ConeTypeAliasSymbol) {
val fir = symbol.fir as FirTypeAlias val fir = symbol.fir as FirTypeAlias
if (fir.expandedType is FirResolvedType) return if (fir.expandedTypeRef is FirResolvedTypeRef) return
} else if (symbol is ConeClassSymbol) { } else if (symbol is ConeClassSymbol) {
val fir = symbol.fir as FirClass val fir = symbol.fir as FirClass
if (fir.superTypes.all { it is FirResolvedType }) return if (fir.superTypeRefs.all { it is FirResolvedTypeRef }) return
} }
val firProvider = FirProvider.getInstance(symbol.fir.session) val firProvider = FirProvider.getInstance(symbol.fir.session)
val classes = generateSequence(classId) { it.outerClassId }.toList().asReversed() val classes = generateSequence(classId) { it.outerClassId }.toList().asReversed()
@@ -209,24 +209,24 @@ open class FirTypeResolveTransformer(
} }
} }
override fun transformType(type: FirType, data: Nothing?): CompositeTransformResult<FirType> { override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
val typeResolver = FirTypeResolver.getInstance(type.session) val typeResolver = FirTypeResolver.getInstance(typeRef.session)
val symbol = typeResolver.resolveToSymbol(type, towerScope, position = FirPosition.SUPER_TYPE_OR_EXPANSION) val symbol = typeResolver.resolveToSymbol(typeRef, towerScope, position = FirPosition.SUPER_TYPE_OR_EXPANSION)
val myTransformer = this@FirTypeResolveTransformer val myTransformer = this@FirTypeResolveTransformer
if (symbol != null) { if (symbol != null) {
if (symbol is AbstractFirBasedSymbol<*> && symbol.fir in traversedClassifiers) { if (symbol is AbstractFirBasedSymbol<*> && symbol.fir in traversedClassifiers) {
return FirErrorTypeImpl(type.session, type.psi, "Recursion detected: ${type.render()}").compose() return FirErrorTypeRefImpl(typeRef.session, typeRef.psi, "Recursion detected: ${typeRef.render()}").compose()
} else { } else {
walkSymbols(symbol) walkSymbols(symbol)
} }
} }
if (type !is FirUserType) return type.transform(myTransformer, data) if (typeRef !is FirUserTypeRef) return typeRef.transform(myTransformer, data)
type.transformChildren(myTransformer, null) typeRef.transformChildren(myTransformer, null)
return myTransformer.transformType(type, typeResolver.resolveUserType(type, symbol, towerScope)) return myTransformer.transformType(typeRef, typeResolver.resolveUserType(typeRef, symbol, towerScope))
} }
} }
} }
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirClassSubstitutionScope( class FirClassSubstitutionScope(
@@ -97,14 +97,14 @@ class FirClassSubstitutionScope(
name: Name name: Name
): FirFunctionSymbol { ): FirFunctionSymbol {
val member = (original as FirBasedSymbol<*>).fir as? FirNamedFunction ?: error("Can't fake override for $original") val member = (original as FirBasedSymbol<*>).fir as? FirNamedFunction ?: error("Can't fake override for $original")
val receiverType = member.receiverType?.coneTypeUnsafe() val receiverType = member.receiverTypeRef?.coneTypeUnsafe()
val newReceiverType = receiverType?.substitute() val newReceiverType = receiverType?.substitute()
val returnType = member.returnType.coneTypeUnsafe() val returnType = member.returnTypeRef.coneTypeUnsafe()
val newReturnType = returnType.substitute() val newReturnType = returnType.substitute()
val newParameterTypes = member.valueParameters.map { val newParameterTypes = member.valueParameters.map {
it.returnType.coneTypeUnsafe().substitute() it.returnTypeRef.coneTypeUnsafe().substitute()
} }
val symbol = FirFunctionSymbol(original.callableId, true) val symbol = FirFunctionSymbol(original.callableId, true)
@@ -116,15 +116,15 @@ class FirClassSubstitutionScope(
psi, psi,
symbol, symbol,
name, name,
member.receiverType?.withReplacedConeType(newReceiverType), member.receiverTypeRef?.withReplacedConeType(newReceiverType),
member.returnType.withReplacedConeType(newReturnType) member.returnTypeRef.withReplacedConeType(newReturnType)
).apply { ).apply {
status = member.status as FirDeclarationStatusImpl status = member.status as FirDeclarationStatusImpl
valueParameters += member.valueParameters.zip(newParameterTypes) { valueParameter, newType -> valueParameters += member.valueParameters.zip(newParameterTypes) { valueParameter, newType ->
with(valueParameter) { with(valueParameter) {
FirValueParameterImpl( FirValueParameterImpl(
session, psi, session, psi,
name, this.returnType.withReplacedConeType(newType), name, this.returnTypeRef.withReplacedConeType(newType),
defaultValue, isCrossinline, isNoinline, isVararg defaultValue, isCrossinline, isNoinline, isVararg
) )
} }
@@ -136,11 +136,11 @@ class FirClassSubstitutionScope(
} }
fun FirType.withReplacedConeType(newType: ConeKotlinType?): FirResolvedType { fun FirTypeRef.withReplacedConeType(newType: ConeKotlinType?): FirResolvedTypeRef {
require(this is FirResolvedType) require(this is FirResolvedTypeRef)
if (newType == null) return this if (newType == null) return this
return FirResolvedTypeImpl( return FirResolvedTypeRefImpl(
session, psi, newType, session, psi, newType,
isMarkedNullable, isMarkedNullable,
annotations annotations
@@ -20,8 +20,8 @@ import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirResolvedType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.cast
@@ -40,8 +40,8 @@ class FirClassUseSiteScope(
return true return true
} }
private fun isSubtypeOf(subType: FirType, superType: FirType) = private fun isSubtypeOf(subType: FirTypeRef, superType: FirTypeRef) =
isSubtypeOf(subType.cast<FirResolvedType>().type, superType.cast<FirResolvedType>().type) isSubtypeOf(subType.cast<FirResolvedTypeRef>().type, superType.cast<FirResolvedTypeRef>().type)
@Suppress("UNUSED_PARAMETER") @Suppress("UNUSED_PARAMETER")
private fun isEqualTypes(a: ConeKotlinType, b: ConeKotlinType): Boolean { private fun isEqualTypes(a: ConeKotlinType, b: ConeKotlinType): Boolean {
@@ -49,22 +49,22 @@ class FirClassUseSiteScope(
return true return true
} }
private fun isEqualTypes(a: FirType, b: FirType) = isEqualTypes(a.cast<FirResolvedType>().type, b.cast<FirResolvedType>().type) private fun isEqualTypes(a: FirTypeRef, b: FirTypeRef) = isEqualTypes(a.cast<FirResolvedTypeRef>().type, b.cast<FirResolvedTypeRef>().type)
private fun isOverriddenFunCheck(member: FirNamedFunction, self: FirNamedFunction): Boolean { private fun isOverriddenFunCheck(member: FirNamedFunction, self: FirNamedFunction): Boolean {
return member.valueParameters.size == self.valueParameters.size && return member.valueParameters.size == self.valueParameters.size &&
member.valueParameters.zip(self.valueParameters).all { (memberParam, selfParam) -> member.valueParameters.zip(self.valueParameters).all { (memberParam, selfParam) ->
isEqualTypes(memberParam.returnType, selfParam.returnType) isEqualTypes(memberParam.returnTypeRef, selfParam.returnTypeRef)
} }
} }
private fun ConeCallableSymbol.isOverridden(seen: Set<ConeCallableSymbol>): ConeCallableSymbol? { private fun ConeCallableSymbol.isOverridden(seen: Set<ConeCallableSymbol>): ConeCallableSymbol? {
if (overrides.containsKey(this)) return overrides[this] if (overrides.containsKey(this)) return overrides[this]
fun sameReceivers(memberType: FirType?, selfType: FirType?): Boolean { fun sameReceivers(memberTypeRef: FirTypeRef?, selfTypeRef: FirTypeRef?): Boolean {
return when { return when {
memberType != null && selfType != null -> isEqualTypes(memberType, selfType) memberTypeRef != null && selfTypeRef != null -> isEqualTypes(memberTypeRef, selfTypeRef)
else -> memberType == null && selfType == null else -> memberTypeRef == null && selfTypeRef == null
} }
} }
@@ -81,8 +81,8 @@ class FirClassUseSiteScope(
val overriding = seen.firstOrNull { val overriding = seen.firstOrNull {
val member = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMember val member = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMember
member.isOverride && self.modality != Modality.FINAL member.isOverride && self.modality != Modality.FINAL
&& sameReceivers(member.receiverType, self.receiverType) && sameReceivers(member.receiverTypeRef, self.receiverTypeRef)
&& isSubtypeOf(member.returnType, self.returnType) && isSubtypeOf(member.returnTypeRef, self.returnTypeRef)
&& similarFunctionsOrBothProperties(member, self) && similarFunctionsOrBothProperties(member, self)
} // TODO: two or more overrides for one fun? } // TODO: two or more overrides for one fun?
overrides[this] = overriding overrides[this] = overriding
@@ -62,8 +62,8 @@ FILE: enums.kt
public final companion object Companion { public final companion object Companion {
public constructor(): super<R|kotlin/Any|>() public constructor(): super<R|kotlin/Any|>()
public final const property G(val): R|error: Not supported: FirImplicitTypeImpl| = Double(6.67E-11) public final const property G(val): R|error: Not supported: FirImplicitTypeRefImpl| = Double(6.67E-11)
public get(): R|error: Not supported: FirImplicitTypeImpl| public get(): R|error: Not supported: FirImplicitTypeRefImpl|
} }
@@ -9,8 +9,8 @@ FILE: simpleClass.kt
public final class SomeClass : R|SomeInterface| { public final class SomeClass : R|SomeInterface| {
public constructor(): super<R|kotlin/Any|>() public constructor(): super<R|kotlin/Any|>()
private final property baz(val): R|error: Not supported: FirImplicitTypeImpl| = Int(42) private final property baz(val): R|error: Not supported: FirImplicitTypeRefImpl| = Int(42)
private get(): R|error: Not supported: FirImplicitTypeImpl| private get(): R|error: Not supported: FirImplicitTypeRefImpl|
public final override function foo(x: R|kotlin/Int|, y: R|kotlin/String|): R|kotlin/String| { public final override function foo(x: R|kotlin/Int|, y: R|kotlin/String|): R|kotlin/String| {
return@@@foo <Unresolved name: plus>#(<Unresolved name: plus>#(<Unresolved name: y>#, <Unresolved name: x>#), R|/SomeClass.baz|) return@@@foo <Unresolved name: plus>#(<Unresolved name: plus>#(<Unresolved name: y>#, <Unresolved name: x>#), R|/SomeClass.baz|)
@@ -1,7 +1,7 @@
FILE: simple.kt FILE: simple.kt
public final function foo(): R|error: Not supported: FirImplicitTypeImpl| { public final function foo(): R|error: Not supported: FirImplicitTypeRefImpl| {
return@@@foo Int(1) return@@@foo Int(1)
} }
public final function bar(): R|error: Not supported: FirImplicitTypeImpl| { public final function bar(): R|error: Not supported: FirImplicitTypeRefImpl| {
return@@@bar R|/foo|() return@@@bar R|/foo|()
} }
+2 -2
View File
@@ -9,8 +9,8 @@ FILE: simpleClass.kt
public final class SomeClass : R|SomeInterface| { public final class SomeClass : R|SomeInterface| {
public constructor(): super<R|kotlin/Any|>() public constructor(): super<R|kotlin/Any|>()
private final property baz(val): R|error: Not supported: FirImplicitTypeImpl| = Int(42) private final property baz(val): R|error: Not supported: FirImplicitTypeRefImpl| = Int(42)
private get(): R|error: Not supported: FirImplicitTypeImpl| private get(): R|error: Not supported: FirImplicitTypeRefImpl|
public final override function foo(x: R|kotlin/Int|, y: R|kotlin/String|): R|kotlin/String| { public final override function foo(x: R|kotlin/Int|, y: R|kotlin/String|): R|kotlin/String| {
return@@@foo <Unresolved name: plus>#(<Unresolved name: plus>#(<Unresolved name: y>#, <Unresolved name: x>#), R|/SomeClass.baz|) return@@@foo <Unresolved name: plus>#(<Unresolved name: plus>#(<Unresolved name: y>#, <Unresolved name: x>#), R|/SomeClass.baz|)
+2 -2
View File
@@ -1,5 +1,5 @@
FILE: functionX.kt FILE: functionX.kt
public final property x(val): R|kotlin/jvm/functions/Function0<kotlin/Int>| = function R|error: Not supported: FirImplicitTypeImpl|.<anonymous>(): R|error: Not supported: FirImplicitTypeImpl| { public final property x(val): R|kotlin/jvm/functions/Function0<kotlin/Int>| = function R|error: Not supported: FirImplicitTypeRefImpl|.<anonymous>(): R|error: Not supported: FirImplicitTypeRefImpl| {
return { return {
Int(42) Int(42)
} }
@@ -7,7 +7,7 @@ FILE: functionX.kt
} }
public get(): R|kotlin/jvm/functions/Function0<kotlin/Int>| public get(): R|kotlin/jvm/functions/Function0<kotlin/Int>|
public final property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = function R|error: Not supported: FirImplicitTypeImpl|.<anonymous>(): R|error: Not supported: FirImplicitTypeImpl| { public final property y(val): R|kotlin/Function1<kotlin/String, kotlin/String>| = function R|error: Not supported: FirImplicitTypeRefImpl|.<anonymous>(): R|error: Not supported: FirImplicitTypeRefImpl| {
return { return {
<Unresolved name: it># <Unresolved name: it>#
} }
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinType import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
@@ -95,7 +95,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitCallableMember(callableMember: FirCallableMember) { override fun visitCallableMember(callableMember: FirCallableMember) {
visitMemberDeclaration(callableMember) visitMemberDeclaration(callableMember)
val receiverType = callableMember.receiverType val receiverType = callableMember.receiverTypeRef
if (receiverType != null) { if (receiverType != null) {
print(" ") print(" ")
receiverType.accept(this) receiverType.accept(this)
@@ -107,7 +107,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print(if (callableMember.isVar) "(var)" else "(val)") print(if (callableMember.isVar) "(var)" else "(val)")
} }
print(": ") print(": ")
callableMember.returnType.accept(this) callableMember.returnTypeRef.accept(this)
} }
private fun Visibility.asString() = private fun Visibility.asString() =
@@ -222,9 +222,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitRegularClass(regularClass: FirRegularClass) { override fun visitRegularClass(regularClass: FirRegularClass) {
visitMemberDeclaration(regularClass) visitMemberDeclaration(regularClass)
if (regularClass.superTypes.isNotEmpty()) { if (regularClass.superTypeRefs.isNotEmpty()) {
print(" : ") print(" : ")
regularClass.superTypes.renderSeparated() regularClass.superTypeRefs.renderSeparated()
} }
regularClass.renderDeclarations() regularClass.renderDeclarations()
} }
@@ -232,7 +232,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) { override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) {
anonymousObject.annotations.renderAnnotations() anonymousObject.annotations.renderAnnotations()
print("object : ") print("object : ")
anonymousObject.superTypes.renderSeparated() anonymousObject.superTypeRefs.renderSeparated()
anonymousObject.renderDeclarations() anonymousObject.renderDeclarations()
} }
@@ -240,7 +240,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
variable.annotations.renderAnnotations() variable.annotations.renderAnnotations()
visitNamedDeclaration(variable) visitNamedDeclaration(variable)
print(": ") print(": ")
variable.returnType.accept(this) variable.returnTypeRef.accept(this)
variable.initializer?.let { variable.initializer?.let {
print(" = ") print(" = ")
it.accept(this) it.accept(this)
@@ -301,7 +301,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print(if (propertyAccessor.isGetter) "get" else "set") print(if (propertyAccessor.isGetter) "get" else "set")
propertyAccessor.valueParameters.renderParameters() propertyAccessor.valueParameters.renderParameters()
print(": ") print(": ")
propertyAccessor.returnType.accept(this) propertyAccessor.returnTypeRef.accept(this)
propertyAccessor.body?.accept(this) propertyAccessor.body?.accept(this)
} }
@@ -312,7 +312,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print("${label.name}@") print("${label.name}@")
} }
print("function ") print("function ")
val receiverType = anonymousFunction.receiverType val receiverType = anonymousFunction.receiverTypeRef
if (receiverType != null) { if (receiverType != null) {
print(" ") print(" ")
receiverType.accept(this) receiverType.accept(this)
@@ -321,7 +321,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print("<anonymous>") print("<anonymous>")
anonymousFunction.valueParameters.renderParameters() anonymousFunction.valueParameters.renderParameters()
print(": ") print(": ")
anonymousFunction.returnType.accept(this) anonymousFunction.returnTypeRef.accept(this)
anonymousFunction.body?.accept(this) anonymousFunction.body?.accept(this)
} }
@@ -355,7 +355,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
typeAlias.annotations.renderAnnotations() typeAlias.annotations.renderAnnotations()
visitMemberDeclaration(typeAlias) visitMemberDeclaration(typeAlias)
print(" = ") print(" = ")
typeAlias.expandedType.accept(this) typeAlias.expandedTypeRef.accept(this)
println() println()
} }
@@ -390,7 +390,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) { if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) {
print(valueParameter.name.toString() + ": ") print(valueParameter.name.toString() + ": ")
} }
valueParameter.returnType.accept(this) valueParameter.returnTypeRef.accept(this)
valueParameter.defaultValue?.let { valueParameter.defaultValue?.let {
print(" = ") print(" = ")
it.accept(this) it.accept(this)
@@ -542,7 +542,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print(it.name) print(it.name)
print(":") print(":")
} }
annotationCall.annotationType.accept(this) annotationCall.annotationTypeRef.accept(this)
visitCall(annotationCall) visitCall(annotationCall)
if (annotationCall.useSiteTarget == AnnotationUseSiteTarget.FILE) { if (annotationCall.useSiteTarget == AnnotationUseSiteTarget.FILE) {
println() println()
@@ -557,54 +557,54 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
} else if (delegatedConstructorCall.isThis) { } else if (delegatedConstructorCall.isThis) {
print(": this<") print(": this<")
} }
delegatedConstructorCall.constructedType.accept(this) delegatedConstructorCall.constructedTypeRef.accept(this)
print(">") print(">")
visitCall(delegatedConstructorCall) visitCall(delegatedConstructorCall)
} }
override fun visitType(type: FirType) { override fun visitTypeRef(typeRef: FirTypeRef) {
type.annotations.renderAnnotations() typeRef.annotations.renderAnnotations()
visitElement(type) visitElement(typeRef)
} }
override fun visitDelegatedType(delegatedType: FirDelegatedType) { override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef) {
delegatedType.type.accept(this) delegatedTypeRef.typeRef.accept(this)
print(" by ") print(" by ")
delegatedType.delegate?.accept(this) delegatedTypeRef.delegate?.accept(this)
} }
override fun visitErrorType(errorType: FirErrorType) { override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) {
visitType(errorType) visitTypeRef(errorTypeRef)
print("<ERROR TYPE: ${errorType.reason}>") print("<ERROR TYPE: ${errorTypeRef.reason}>")
} }
override fun visitImplicitType(implicitType: FirImplicitType) { override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) {
print(if (implicitType is FirImplicitBuiltinType) "kotlin.${implicitType.name}" else "<implicit>") print(if (implicitTypeRef is FirImplicitBuiltinTypeRef) "kotlin.${implicitTypeRef.name}" else "<implicit>")
} }
override fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability) { override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) {
if (typeWithNullability.isMarkedNullable) { if (typeRefWithNullability.isMarkedNullable) {
print("?") print("?")
} }
} }
override fun visitDynamicType(dynamicType: FirDynamicType) { override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef) {
dynamicType.annotations.renderAnnotations() dynamicTypeRef.annotations.renderAnnotations()
print("<dynamic>") print("<dynamic>")
visitTypeWithNullability(dynamicType) visitTypeRefWithNullability(dynamicTypeRef)
} }
override fun visitFunctionType(functionType: FirFunctionType) { override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef) {
print("( ") print("( ")
functionType.receiverType?.let { functionTypeRef.receiverTypeRef?.let {
it.accept(this) it.accept(this)
print(".") print(".")
} }
functionType.valueParameters.renderParameters() functionTypeRef.valueParameters.renderParameters()
print(" -> ") print(" -> ")
functionType.returnType.accept(this) functionTypeRef.returnTypeRef.accept(this)
print(" )") print(" )")
visitTypeWithNullability(functionType) visitTypeRefWithNullability(functionTypeRef)
} }
private fun ConeSymbol.asString(): String { private fun ConeSymbol.asString(): String {
@@ -654,18 +654,18 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
} }
} }
override fun visitResolvedType(resolvedType: FirResolvedType) { override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
resolvedType.annotations.renderAnnotations() resolvedTypeRef.annotations.renderAnnotations()
print("R|") print("R|")
val coneType = resolvedType.type val coneType = resolvedTypeRef.type
print(coneType.asString()) print(coneType.asString())
print("|") print("|")
visitTypeWithNullability(resolvedType) visitTypeRefWithNullability(resolvedTypeRef)
} }
override fun visitUserType(userType: FirUserType) { override fun visitUserTypeRef(userTypeRef: FirUserTypeRef) {
userType.annotations.renderAnnotations() userTypeRef.annotations.renderAnnotations()
for ((index, qualifier) in userType.qualifier.withIndex()) { for ((index, qualifier) in userTypeRef.qualifier.withIndex()) {
if (index != 0) { if (index != 0) {
print(".") print(".")
} }
@@ -676,7 +676,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print(">") print(">")
} }
} }
visitTypeWithNullability(userType) visitTypeRefWithNullability(userTypeRef)
} }
override fun visitTypeProjection(typeProjection: FirTypeProjection) { override fun visitTypeProjection(typeProjection: FirTypeProjection) {
@@ -685,7 +685,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance) { override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance) {
typeProjectionWithVariance.variance.renderVariance() typeProjectionWithVariance.variance.renderVariance()
typeProjectionWithVariance.type.accept(this) typeProjectionWithVariance.typeRef.accept(this)
} }
override fun visitStarProjection(starProjection: FirStarProjection) { override fun visitStarProjection(starProjection: FirStarProjection) {
@@ -722,7 +722,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitSuperReference(superReference: FirSuperReference) { override fun visitSuperReference(superReference: FirSuperReference) {
print("super<") print("super<")
superReference.superType.accept(this) superReference.superTypeRef.accept(this)
print(">") print(">")
} }
@@ -792,7 +792,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print(operatorCall.operation.operator) print(operatorCall.operation.operator)
if (operatorCall is FirTypeOperatorCall) { if (operatorCall is FirTypeOperatorCall) {
print("/") print("/")
operatorCall.type.accept(this) operatorCall.typeRef.accept(this)
} }
visitCall(operatorCall) visitCall(operatorCall)
} }
@@ -5,16 +5,16 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirSuperReference : FirReference { interface FirSuperReference : FirReference {
val superType: FirType val superTypeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitSuperReference(this, data) visitor.visitSuperReference(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
superType.accept(visitor, data) superTypeRef.accept(visitor, data)
} }
} }
@@ -8,11 +8,11 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirLabeledElement import org.jetbrains.kotlin.fir.FirLabeledElement
import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirAnonymousFunction : @VisitedSupertype FirFunction, FirExpression, FirTypedDeclaration, FirLabeledElement { interface FirAnonymousFunction : @VisitedSupertype FirFunction, FirExpression, FirTypedDeclaration, FirLabeledElement {
val receiverType: FirType? val receiverTypeRef: FirTypeRef?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitAnonymousFunction(this, data) visitor.visitAnonymousFunction(this, data)
@@ -20,7 +20,7 @@ interface FirAnonymousFunction : @VisitedSupertype FirFunction, FirExpression, F
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super<FirTypedDeclaration>.acceptChildren(visitor, data) super<FirTypedDeclaration>.acceptChildren(visitor, data)
super<FirLabeledElement>.acceptChildren(visitor, data) super<FirLabeledElement>.acceptChildren(visitor, data)
receiverType?.accept(visitor, data) receiverTypeRef?.accept(visitor, data)
for (parameter in valueParameters) { for (parameter in valueParameters) {
parameter.accept(visitor, data) parameter.accept(visitor, data)
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
// Good name needed (something with receiver, type parameters, return type, and name) // Good name needed (something with receiver, type parameters, return type, and name)
@@ -16,14 +16,14 @@ interface FirCallableMember :
FirTypedDeclaration, FirSymbolOwner<FirCallableMember> { FirTypedDeclaration, FirSymbolOwner<FirCallableMember> {
val isOverride: Boolean get() = status.isOverride val isOverride: Boolean get() = status.isOverride
val receiverType: FirType? val receiverTypeRef: FirTypeRef?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitCallableMember(this, data) visitor.visitCallableMember(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
receiverType?.accept(visitor, data) receiverTypeRef?.accept(visitor, data)
super<FirMemberDeclaration>.acceptChildren(visitor, data) super<FirMemberDeclaration>.acceptChildren(visitor, data)
returnType.accept(visitor, data) returnTypeRef.accept(visitor, data)
} }
} }
@@ -9,13 +9,13 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContainer { interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContainer {
// including delegated types // including delegated types
val superTypes: List<FirType> val superTypeRefs: List<FirTypeRef>
val classKind: ClassKind val classKind: ClassKind
@@ -23,7 +23,7 @@ interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContain
visitor.visitClass(this, data) visitor.visitClass(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
for (superType in superTypes) { for (superType in superTypeRefs) {
superType.accept(visitor, data) superType.accept(visitor, data)
} }
for (declaration in declarations) { for (declaration in declarations) {
@@ -32,4 +32,4 @@ interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContain
} }
} }
val FirClass.superConeTypes get() = superTypes.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() } val FirClass.superConeTypes get() = superTypeRefs.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() }
@@ -7,21 +7,21 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirTypeAlias : FirMemberDeclaration, FirSymbolOwner<FirTypeAlias> { interface FirTypeAlias : FirMemberDeclaration, FirSymbolOwner<FirTypeAlias> {
val expandedType: FirType val expandedTypeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeAlias(this, data) visitor.visitTypeAlias(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
expandedType.accept(visitor, data) expandedTypeRef.accept(visitor, data)
} }
} }
val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedType.coneTypeSafe() val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedTypeRef.coneTypeSafe()
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
@@ -19,7 +19,7 @@ interface FirTypeParameter : FirNamedDeclaration, FirAnnotationContainer, FirSym
val isReified: Boolean val isReified: Boolean
val bounds: List<FirType> val bounds: List<FirTypeRef>
override val symbol: FirTypeParameterSymbol override val symbol: FirTypeParameterSymbol
@@ -6,11 +6,11 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer { interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
val returnType: FirType val returnTypeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypedDeclaration(this, data) visitor.visitTypedDeclaration(this, data)
@@ -18,6 +18,6 @@ interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data) acceptAnnotations(visitor, data)
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
returnType.accept(visitor, data) returnTypeRef.accept(visitor, data)
} }
} }
@@ -13,28 +13,28 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirCallableMember import org.jetbrains.kotlin.fir.declarations.FirCallableMember
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMember { abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCallableMember {
final override val symbol: FirBasedSymbol<FirCallableMember> final override val symbol: FirBasedSymbol<FirCallableMember>
final override var receiverType: FirType? final override var receiverTypeRef: FirTypeRef?
final override var returnType: FirType final override var returnTypeRef: FirTypeRef
constructor( constructor(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
symbol: FirBasedSymbol<FirCallableMember>, symbol: FirBasedSymbol<FirCallableMember>,
name: Name, name: Name,
receiverType: FirType?, receiverTypeRef: FirTypeRef?,
returnType: FirType returnTypeRef: FirTypeRef
) : super(session, psi, name) { ) : super(session, psi, name) {
this.symbol = symbol this.symbol = symbol
symbol.bind(this) symbol.bind(this)
this.receiverType = receiverType this.receiverTypeRef = receiverTypeRef
this.returnType = returnType this.returnTypeRef = returnTypeRef
} }
constructor( constructor(
@@ -47,20 +47,20 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
isExpect: Boolean, isExpect: Boolean,
isActual: Boolean, isActual: Boolean,
isOverride: Boolean, isOverride: Boolean,
receiverType: FirType?, receiverTypeRef: FirTypeRef?,
returnType: FirType returnTypeRef: FirTypeRef
) : super(session, psi, name, visibility, modality, isExpect, isActual) { ) : super(session, psi, name, visibility, modality, isExpect, isActual) {
this.symbol = symbol this.symbol = symbol
symbol.bind(this) symbol.bind(this)
this.receiverType = receiverType this.receiverTypeRef = receiverTypeRef
this.returnType = returnType this.returnTypeRef = returnTypeRef
status.isOverride = isOverride status.isOverride = isOverride
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
receiverType = receiverType?.transformSingle(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data) return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data)
} }
@@ -11,20 +11,20 @@ import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirAnonymousFunctionImpl( class FirAnonymousFunctionImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override var returnType: FirType, override var returnTypeRef: FirTypeRef,
override var receiverType: FirType? override var receiverTypeRef: FirTypeRef?
) : FirAbstractFunction(session, psi), FirAnonymousFunction, FirModifiableFunction { ) : FirAbstractFunction(session, psi), FirAnonymousFunction, FirModifiableFunction {
override var label: FirLabel? = null override var label: FirLabel? = null
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
receiverType = receiverType?.transformSingle(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
label = label?.transformSingle(transformer, data) label = label?.transformSingle(transformer, data)
return super<FirAbstractFunction>.transformChildren(transformer, data) return super<FirAbstractFunction>.transformChildren(transformer, data)
} }
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -19,7 +19,7 @@ class FirAnonymousObjectImpl(
session: FirSession, session: FirSession,
psi: PsiElement? psi: PsiElement?
) : FirAbstractAnnotatedDeclaration(session, psi), FirAnonymousObject, FirModifiableClass { ) : FirAbstractAnnotatedDeclaration(session, psi), FirAnonymousObject, FirModifiableClass {
override val superTypes = mutableListOf<FirType>() override val superTypeRefs = mutableListOf<FirTypeRef>()
override val declarations = mutableListOf<FirDeclaration>() override val declarations = mutableListOf<FirDeclaration>()
@@ -28,7 +28,7 @@ class FirAnonymousObjectImpl(
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
superTypes.transformInplace(transformer, data) superTypeRefs.transformInplace(transformer, data)
declarations.transformInplace(transformer, data) declarations.transformInplace(transformer, data)
return super<FirAbstractAnnotatedDeclaration>.transformChildren(transformer, data) return super<FirAbstractAnnotatedDeclaration>.transformChildren(transformer, data)
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -42,13 +42,13 @@ open class FirClassImpl(
status.isInline = isInline status.isInline = isInline
} }
override val superTypes = mutableListOf<FirType>() override val superTypeRefs = mutableListOf<FirTypeRef>()
override val declarations = mutableListOf<FirDeclaration>() override val declarations = mutableListOf<FirDeclaration>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirRegularClass { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirRegularClass {
superTypes.transformInplace(transformer, data) superTypeRefs.transformInplace(transformer, data)
val result = super<FirAbstractMemberDeclaration>.transformChildren(transformer, data) as FirRegularClass val result = super<FirAbstractMemberDeclaration>.transformChildren(transformer, data) as FirRegularClass
// Transform declarations in last turn // Transform declarations in last turn
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -28,11 +28,11 @@ open class FirConstructorImpl(
visibility: Visibility, visibility: Visibility,
isExpect: Boolean, isExpect: Boolean,
isActual: Boolean, isActual: Boolean,
delegatedSelfType: FirType, delegatedSelfTypeRef: FirTypeRef,
final override var delegatedConstructor: FirDelegatedConstructorCall? final override var delegatedConstructor: FirDelegatedConstructorCall?
) : FirAbstractCallableMember( ) : FirAbstractCallableMember(
session, psi, symbol, NAME, visibility, Modality.FINAL, session, psi, symbol, NAME, visibility, Modality.FINAL,
isExpect, isActual, isOverride = false, receiverType = null, returnType = delegatedSelfType isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef
), FirConstructor { ), FirConstructor {
override val valueParameters = mutableListOf<FirValueParameter>() override val valueParameters = mutableListOf<FirValueParameter>()
@@ -16,8 +16,8 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitType import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
abstract class FirDefaultPropertyAccessor( abstract class FirDefaultPropertyAccessor(
@@ -40,15 +40,15 @@ abstract class FirDefaultPropertyAccessor(
class FirDefaultPropertyGetter( class FirDefaultPropertyGetter(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
propertyType: FirType, propertyTypeRef: FirTypeRef,
visibility: Visibility visibility: Visibility
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility) { ) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility) {
override val valueParameters: List<FirValueParameter> = emptyList() override val valueParameters: List<FirValueParameter> = emptyList()
override var returnType: FirType = propertyType override var returnTypeRef: FirTypeRef = propertyTypeRef
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
status = status.transformSingle(transformer, data) status = status.transformSingle(transformer, data)
return this return this
@@ -58,16 +58,16 @@ class FirDefaultPropertyGetter(
class FirDefaultPropertySetter( class FirDefaultPropertySetter(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
propertyType: FirType, propertyTypeRef: FirTypeRef,
visibility: Visibility visibility: Visibility
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) { ) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
override val valueParameters = mutableListOf(FirDefaultSetterValueParameter(session, psi, propertyType)) override val valueParameters = mutableListOf(FirDefaultSetterValueParameter(session, psi, propertyTypeRef))
override var returnType: FirType = FirImplicitUnitType(session, psi) override var returnTypeRef: FirTypeRef = FirImplicitUnitTypeRef(session, psi)
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
valueParameters.transformInplace(transformer, data) valueParameters.transformInplace(transformer, data)
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
status = status.transformSingle(transformer, data) status = status.transformSingle(transformer, data)
return this return this
@@ -11,14 +11,14 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirDefaultSetterValueParameter( class FirDefaultSetterValueParameter(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override var returnType: FirType override var returnTypeRef: FirTypeRef
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter { ) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
override val isCrossinline = false override val isCrossinline = false
@@ -29,7 +29,7 @@ class FirDefaultSetterValueParameter(
override val defaultValue: FirExpression? = null override val defaultValue: FirExpression? = null
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data) return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data)
} }
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -27,9 +27,9 @@ class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirMo
psi: PsiElement?, psi: PsiElement?,
symbol: FirFunctionSymbol, symbol: FirFunctionSymbol,
name: Name, name: Name,
receiverType: FirType?, receiverTypeRef: FirTypeRef?,
returnType: FirType returnTypeRef: FirTypeRef
) : super(session, psi, symbol, name, receiverType, returnType) ) : super(session, psi, symbol, name, receiverTypeRef, returnTypeRef)
constructor( constructor(
session: FirSession, session: FirSession,
@@ -47,11 +47,11 @@ class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirMo
isTailRec: Boolean, isTailRec: Boolean,
isExternal: Boolean, isExternal: Boolean,
isSuspend: Boolean, isSuspend: Boolean,
receiverType: FirType?, receiverTypeRef: FirTypeRef?,
returnType: FirType returnTypeRef: FirTypeRef
) : super( ) : super(
session, psi, symbol, name, visibility, modality, session, psi, symbol, name, visibility, modality,
isExpect, isActual, isOverride, receiverType, returnType isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
) { ) {
status.isOperator = isOperator status.isOperator = isOperator
status.isInfix = isInfix status.isInfix = isInfix
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -31,15 +31,15 @@ class FirMemberPropertyImpl(
isOverride: Boolean, isOverride: Boolean,
isConst: Boolean, isConst: Boolean,
isLateInit: Boolean, isLateInit: Boolean,
receiverType: FirType?, receiverTypeRef: FirTypeRef?,
returnType: FirType, returnTypeRef: FirTypeRef,
override val isVar: Boolean, override val isVar: Boolean,
override var initializer: FirExpression?, override var initializer: FirExpression?,
override var getter: FirPropertyAccessor, override var getter: FirPropertyAccessor,
override var setter: FirPropertyAccessor, override var setter: FirPropertyAccessor,
override var delegate: FirExpression? override var delegate: FirExpression?
) : FirAbstractCallableMember( ) : FirAbstractCallableMember(
session, psi, symbol, name, visibility, modality, isExpect, isActual, isOverride, receiverType, returnType session, psi, symbol, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef
), FirProperty { ), FirProperty {
init { init {
status.isConst = isConst status.isConst = isConst
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
interface FirModifiableClass : FirClass { interface FirModifiableClass : FirClass {
override val superTypes: MutableList<FirType> override val superTypeRefs: MutableList<FirTypeRef>
override val declarations: MutableList<FirDeclaration> override val declarations: MutableList<FirDeclaration>
} }
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
class FirPrimaryConstructorImpl( class FirPrimaryConstructorImpl(
session: FirSession, session: FirSession,
@@ -19,6 +19,6 @@ class FirPrimaryConstructorImpl(
visibility: Visibility, visibility: Visibility,
isExpect: Boolean, isExpect: Boolean,
isActual: Boolean, isActual: Boolean,
delegatedSelfType: FirType, delegatedSelfTypeRef: FirTypeRef,
delegatedConstructor: FirDelegatedConstructorCall? delegatedConstructor: FirDelegatedConstructorCall?
) : FirConstructorImpl(session, psi, symbol, visibility, isExpect, isActual, delegatedSelfType, delegatedConstructor) ) : FirConstructorImpl(session, psi, symbol, visibility, isExpect, isActual, delegatedSelfTypeRef, delegatedConstructor)
@@ -11,9 +11,8 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirPropertyAccessorImpl( class FirPropertyAccessorImpl(
@@ -21,14 +20,14 @@ class FirPropertyAccessorImpl(
psi: PsiElement?, psi: PsiElement?,
override val isGetter: Boolean, override val isGetter: Boolean,
visibility: Visibility, visibility: Visibility,
override var returnType: FirType override var returnTypeRef: FirTypeRef
) : FirAbstractFunction(session, psi), FirPropertyAccessor { ) : FirAbstractFunction(session, psi), FirPropertyAccessor {
override var status = FirDeclarationStatusImpl( override var status = FirDeclarationStatusImpl(
session, visibility, Modality.FINAL session, visibility, Modality.FINAL
) )
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
status = status.transformSingle(transformer, data) status = status.transformSingle(transformer, data)
return super<FirAbstractFunction>.transformChildren(transformer, data) return super<FirAbstractFunction>.transformChildren(transformer, data)
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -25,7 +25,7 @@ class FirTypeAliasImpl(
visibility: Visibility, visibility: Visibility,
isExpect: Boolean, isExpect: Boolean,
isActual: Boolean, isActual: Boolean,
override var expandedType: FirType override var expandedTypeRef: FirTypeRef
) : FirAbstractMemberDeclaration(session, psi, name, visibility, Modality.FINAL, isExpect, isActual), FirTypeAlias { ) : FirAbstractMemberDeclaration(session, psi, name, visibility, Modality.FINAL, isExpect, isActual), FirTypeAlias {
init { init {
@@ -33,7 +33,7 @@ class FirTypeAliasImpl(
} }
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
expandedType = expandedType.transformSingle(transformer, data) expandedTypeRef = expandedTypeRef.transformSingle(transformer, data)
return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data) return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data)
} }
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
@@ -28,7 +28,7 @@ class FirTypeParameterImpl(
symbol.bind(this) symbol.bind(this)
} }
override val bounds = mutableListOf<FirType>() override val bounds = mutableListOf<FirTypeRef>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
bounds.transformInplace(transformer, data) bounds.transformInplace(transformer, data)
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -19,14 +19,14 @@ class FirValueParameterImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
name: Name, name: Name,
override var returnType: FirType, override var returnTypeRef: FirTypeRef,
override var defaultValue: FirExpression?, override var defaultValue: FirExpression?,
override val isCrossinline: Boolean, override val isCrossinline: Boolean,
override val isNoinline: Boolean, override val isNoinline: Boolean,
override val isVararg: Boolean override val isVararg: Boolean
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter { ) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
defaultValue = defaultValue?.transformSingle(transformer, data) defaultValue = defaultValue?.transformSingle(transformer, data)
return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data) return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data)
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.fir.expressions.FirVariable
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -19,13 +19,13 @@ class FirVariableImpl(
session: FirSession, session: FirSession,
psiElement: PsiElement?, psiElement: PsiElement?,
name: Name, name: Name,
override var returnType: FirType, override var returnTypeRef: FirTypeRef,
override val isVar: Boolean, override val isVar: Boolean,
override var initializer: FirExpression?, override var initializer: FirExpression?,
override var delegate: FirExpression? = null override var delegate: FirExpression? = null
) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable { ) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
initializer = initializer?.transformSingle(transformer, data) initializer = initializer?.transformSingle(transformer, data)
delegate = delegate?.transformSingle(transformer, data) delegate = delegate?.transformSingle(transformer, data)
@@ -7,12 +7,12 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.fir.BaseTransformedType import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType @BaseTransformedType
interface FirAnnotationCall : FirCall { interface FirAnnotationCall : FirCall {
val annotationType: FirType val annotationTypeRef: FirTypeRef
// May be should be not-null (with correct default target) // May be should be not-null (with correct default target)
val useSiteTarget: AnnotationUseSiteTarget? val useSiteTarget: AnnotationUseSiteTarget?
@@ -21,7 +21,7 @@ interface FirAnnotationCall : FirCall {
visitor.visitAnnotationCall(this, data) visitor.visitAnnotationCall(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotationType.accept(visitor, data) annotationTypeRef.accept(visitor, data)
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
} }
} }
@@ -5,13 +5,12 @@
package org.jetbrains.kotlin.fir.expressions package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirDelegatedConstructorCall : FirCall { interface FirDelegatedConstructorCall : FirCall {
// Do we need 'constructedType: FirType' here? // Do we need 'constructedType: FirType' here?
val constructedType: FirType val constructedTypeRef: FirTypeRef
val isThis: Boolean val isThis: Boolean
@@ -22,7 +21,7 @@ interface FirDelegatedConstructorCall : FirCall {
visitor.visitDelegatedConstructorCall(this, data) visitor.visitDelegatedConstructorCall(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
constructedType.accept(visitor, data) constructedTypeRef.accept(visitor, data)
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
} }
} }
@@ -5,20 +5,20 @@
package org.jetbrains.kotlin.fir.expressions package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
// is/!is/as/as? // is/!is/as/as?
interface FirTypeOperatorCall : FirOperatorCall { interface FirTypeOperatorCall : FirOperatorCall {
val argument: FirExpression get() = arguments.first() val argument: FirExpression get() = arguments.first()
val type: FirType val typeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeOperatorCall(this, data) visitor.visitTypeOperatorCall(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
type.accept(visitor, data) typeRef.accept(visitor, data)
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
} }
} }
@@ -11,17 +11,17 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirAnnotationCallImpl( class FirAnnotationCallImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override val useSiteTarget: AnnotationUseSiteTarget?, override val useSiteTarget: AnnotationUseSiteTarget?,
override var annotationType: FirType override var annotationTypeRef: FirTypeRef
) : FirAbstractCall(session, psi), FirAnnotationCall { ) : FirAbstractCall(session, psi), FirAnnotationCall {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
annotationType = annotationType.transformSingle(transformer, data) annotationTypeRef = annotationTypeRef.transformSingle(transformer, data)
return super<FirAbstractCall>.transformChildren(transformer, data) return super<FirAbstractCall>.transformChildren(transformer, data)
} }
@@ -10,17 +10,17 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirDelegatedConstructorCallImpl( class FirDelegatedConstructorCallImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override var constructedType: FirType, override var constructedTypeRef: FirTypeRef,
override val isThis: Boolean override val isThis: Boolean
) : FirAbstractCall(session, psi), FirDelegatedConstructorCall { ) : FirAbstractCall(session, psi), FirDelegatedConstructorCall {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
constructedType = constructedType.transformSingle(transformer, data) constructedTypeRef = constructedTypeRef.transformSingle(transformer, data)
return super<FirAbstractCall>.transformChildren(transformer, data) return super<FirAbstractCall>.transformChildren(transformer, data)
} }
@@ -11,17 +11,17 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirOperation import org.jetbrains.kotlin.fir.expressions.FirOperation
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirTypeOperatorCallImpl( class FirTypeOperatorCallImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override val operation: FirOperation, override val operation: FirOperation,
override var type: FirType override var typeRef: FirTypeRef
) : FirAbstractCall(session, psi), FirTypeOperatorCall { ) : FirAbstractCall(session, psi), FirTypeOperatorCall {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
type = type.transformSingle(transformer, data) typeRef = typeRef.transformSingle(transformer, data)
return super<FirAbstractCall>.transformChildren(transformer, data) return super<FirAbstractCall>.transformChildren(transformer, data)
} }
} }
@@ -7,16 +7,16 @@ package org.jetbrains.kotlin.fir.references
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirExplicitSuperReference( class FirExplicitSuperReference(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override var superType: FirType override var superTypeRef: FirTypeRef
) : FirAbstractElement(session, psi), FirSuperReference { ) : FirAbstractElement(session, psi), FirSuperReference {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
superType = superType.transformSingle(transformer, data) superTypeRef = superTypeRef.transformSingle(transformer, data)
return this return this
} }
} }
@@ -8,17 +8,17 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirDelegatedType : FirType { interface FirDelegatedTypeRef : FirTypeRef {
val delegate: FirExpression? val delegate: FirExpression?
val type: FirType val typeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitDelegatedType(this, data) visitor.visitDelegatedTypeRef(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
delegate?.accept(visitor, data) delegate?.accept(visitor, data)
type.accept(visitor, data) typeRef.accept(visitor, data)
} }
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirDynamicType : FirTypeWithNullability { interface FirDynamicTypeRef : FirTypeRefWithNullability {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitDynamicType(this, data) visitor.visitDynamicTypeRef(this, data)
} }
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirErrorType : FirType { interface FirErrorTypeRef : FirTypeRef {
val reason: String val reason: String
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitErrorType(this, data) visitor.visitErrorTypeRef(this, data)
} }
@@ -8,20 +8,20 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirFunctionType : FirTypeWithNullability { interface FirFunctionTypeRef : FirTypeRefWithNullability {
val receiverType: FirType? val receiverTypeRef: FirTypeRef?
// May be it should inherit FirFunction? // May be it should inherit FirFunction?
val valueParameters: List<FirValueParameter> val valueParameters: List<FirValueParameter>
val returnType: FirType val returnTypeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitFunctionType(this, data) visitor.visitFunctionTypeRef(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
receiverType?.accept(visitor, data) receiverTypeRef?.accept(visitor, data)
returnType.accept(visitor, data) returnTypeRef.accept(visitor, data)
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
for (parameter in valueParameters) { for (parameter in valueParameters) {
parameter.accept(visitor, data) parameter.accept(visitor, data)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirImplicitType : FirType { interface FirImplicitTypeRef : FirTypeRef {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitImplicitType(this, data) visitor.visitImplicitTypeRef(this, data)
} }
@@ -8,17 +8,17 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirResolvedType : FirTypeWithNullability { interface FirResolvedTypeRef : FirTypeRefWithNullability {
val type: ConeKotlinType val type: ConeKotlinType
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedType(this, data) visitor.visitResolvedTypeRef(this, data)
} }
interface FirResolvedFunctionType : @VisitedSupertype FirResolvedType, FirFunctionType { interface FirResolvedFunctionTypeRef : @VisitedSupertype FirResolvedTypeRef, FirFunctionTypeRef {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedFunctionType(this, data) visitor.visitResolvedFunctionTypeRef(this, data)
} }
inline fun <reified T : ConeKotlinType> FirType.coneTypeUnsafe() = (this as FirResolvedType).type as T inline fun <reified T : ConeKotlinType> FirTypeRef.coneTypeUnsafe() = (this as FirResolvedTypeRef).type as T
inline fun <reified T : ConeKotlinType> FirType.coneTypeSafe() = (this as? FirResolvedType)?.type as? T inline fun <reified T : ConeKotlinType> FirTypeRef.coneTypeSafe() = (this as? FirResolvedTypeRef)?.type as? T
@@ -11,13 +11,13 @@ import org.jetbrains.kotlin.types.Variance
interface FirTypeProjectionWithVariance : FirTypeProjection { interface FirTypeProjectionWithVariance : FirTypeProjection {
val variance: Variance val variance: Variance
val type: FirType val typeRef: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeProjectionWithVariance(this, data) visitor.visitTypeProjectionWithVariance(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
type.accept(visitor, data) typeRef.accept(visitor, data)
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
} }
} }
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType @BaseTransformedType
interface FirType : FirElement, FirAnnotationContainer { interface FirTypeRef : FirElement, FirAnnotationContainer {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitType(this, data) visitor.visitTypeRef(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
acceptAnnotations(visitor, data) acceptAnnotations(visitor, data)
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirTypeWithNullability : FirType { interface FirTypeRefWithNullability : FirTypeRef {
val isMarkedNullable: Boolean val isMarkedNullable: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypeWithNullability(this, data) visitor.visitTypeRefWithNullability(this, data)
} }
@@ -12,11 +12,11 @@ interface FirQualifierPart : FirTypeProjectionContainer {
val name: Name val name: Name
} }
interface FirUserType : FirTypeWithNullability { interface FirUserTypeRef : FirTypeRefWithNullability {
val qualifier: List<FirQualifierPart> val qualifier: List<FirQualifierPart>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitUserType(this, data) visitor.visitUserTypeRef(this, data)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
super.acceptChildren(visitor, data) super.acceptChildren(visitor, data)
@@ -10,14 +10,14 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirTypeWithNullability import org.jetbrains.kotlin.fir.types.FirTypeRefWithNullability
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
abstract class FirAbstractAnnotatedType( abstract class FirAbstractAnnotatedTypeRef(
final override val session: FirSession, final override val session: FirSession,
final override val psi: PsiElement?, final override val psi: PsiElement?,
final override val isMarkedNullable: Boolean final override val isMarkedNullable: Boolean
) : FirTypeWithNullability { ) : FirTypeRefWithNullability {
override val annotations = mutableListOf<FirAnnotationCall>() override val annotations = mutableListOf<FirAnnotationCall>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
@@ -10,19 +10,19 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirDelegatedType import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirDelegatedTypeImpl( class FirDelegatedTypeRefImpl(
override var type: FirType, override var typeRef: FirTypeRef,
override var delegate: FirExpression? override var delegate: FirExpression?
) : FirAbstractElement(type.session, type.psi), FirDelegatedType { ) : FirAbstractElement(typeRef.session, typeRef.psi), FirDelegatedTypeRef {
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
get() = type.annotations get() = typeRef.annotations
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
type = type.transformSingle(transformer, data) typeRef = typeRef.transformSingle(transformer, data)
delegate = delegate?.transformSingle(transformer, data) delegate = delegate?.transformSingle(transformer, data)
return this return this
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir.types.impl
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.types.FirDynamicType import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef
class FirDynamicTypeImpl( class FirDynamicTypeRefImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
isNullable: Boolean isNullable: Boolean
) : FirAbstractAnnotatedType(session, psi, isNullable), FirDynamicType ) : FirAbstractAnnotatedTypeRef(session, psi, isNullable), FirDynamicTypeRef
@@ -7,15 +7,15 @@ package org.jetbrains.kotlin.fir.types.impl
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.types.FirErrorType import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
class FirErrorTypeImpl( class FirErrorTypeRefImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
override val reason: String override val reason: String
) : FirAbstractAnnotatedType(session, psi, false), FirErrorType { ) : FirAbstractAnnotatedTypeRef(session, psi, false), FirErrorTypeRef {
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R { override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
return super<FirErrorType>.accept(visitor, data) return super<FirErrorTypeRef>.accept(visitor, data)
} }
} }
@@ -11,24 +11,24 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirFunctionType import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirFunctionTypeImpl( class FirFunctionTypeRefImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
isNullable: Boolean, isNullable: Boolean,
override var receiverType: FirType?, override var receiverTypeRef: FirTypeRef?,
override var returnType: FirType override var returnTypeRef: FirTypeRef
) : FirAbstractAnnotatedType(session, psi, isNullable), FirFunctionType { ) : FirAbstractAnnotatedTypeRef(session, psi, isNullable), FirFunctionTypeRef {
override val valueParameters = mutableListOf<FirValueParameter>() override val valueParameters = mutableListOf<FirValueParameter>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
receiverType = receiverType?.transformSingle(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
valueParameters.transformInplace(transformer, data) valueParameters.transformInplace(transformer, data)
return super<FirAbstractAnnotatedType>.transformChildren(transformer, data) return super<FirAbstractAnnotatedTypeRef>.transformChildren(transformer, data)
} }
} }
@@ -9,32 +9,32 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.FirImplicitType import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.FqNameUnsafe
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
sealed class FirImplicitBuiltinType( sealed class FirImplicitBuiltinTypeRef(
override val session: FirSession, override val session: FirSession,
override val psi: PsiElement?, override val psi: PsiElement?,
val name: Name val name: Name
) : FirImplicitType { ) : FirImplicitTypeRef {
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
get() = emptyList() get() = emptyList()
constructor(session: FirSession, psi: PsiElement?, name: FqNameUnsafe) : this(session, psi, name.shortName()) constructor(session: FirSession, psi: PsiElement?, name: FqNameUnsafe) : this(session, psi, name.shortName())
} }
class FirImplicitUnitType( class FirImplicitUnitTypeRef(
session: FirSession, session: FirSession,
psi: PsiElement? psi: PsiElement?
) : FirImplicitBuiltinType(session, psi, KotlinBuiltIns.FQ_NAMES.unit) ) : FirImplicitBuiltinTypeRef(session, psi, KotlinBuiltIns.FQ_NAMES.unit)
class FirImplicitAnyType( class FirImplicitAnyTypeRef(
session: FirSession, session: FirSession,
psi: PsiElement? psi: PsiElement?
) : FirImplicitBuiltinType(session, psi, KotlinBuiltIns.FQ_NAMES.any) ) : FirImplicitBuiltinTypeRef(session, psi, KotlinBuiltIns.FQ_NAMES.any)
class FirImplicitEnumType( class FirImplicitEnumTypeRef(
session: FirSession, session: FirSession,
psi: PsiElement? psi: PsiElement?
) : FirImplicitBuiltinType(session, psi, KotlinBuiltIns.FQ_NAMES._enum) ) : FirImplicitBuiltinTypeRef(session, psi, KotlinBuiltIns.FQ_NAMES._enum)
@@ -8,12 +8,12 @@ package org.jetbrains.kotlin.fir.types.impl
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.FirImplicitType import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
class FirImplicitTypeImpl( class FirImplicitTypeRefImpl(
override val session: FirSession, override val session: FirSession,
override val psi: PsiElement? override val psi: PsiElement?
) : FirImplicitType { ) : FirImplicitTypeRef {
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
get() = emptyList() get() = emptyList()
} }
@@ -13,24 +13,24 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirResolvedFunctionType import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirResolvedFunctionTypeImpl( class FirResolvedFunctionTypeRefImpl(
override val psi: PsiElement?, override val psi: PsiElement?,
override val session: FirSession, override val session: FirSession,
override val isMarkedNullable: Boolean, override val isMarkedNullable: Boolean,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override var receiverType: FirType?, override var receiverTypeRef: FirTypeRef?,
override val valueParameters: MutableList<FirValueParameter>, override val valueParameters: MutableList<FirValueParameter>,
override var returnType: FirType, override var returnTypeRef: FirTypeRef,
override val type: ConeKotlinType override val type: ConeKotlinType
) : FirResolvedFunctionType { ) : FirResolvedFunctionTypeRef {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
receiverType = receiverType?.transformSingle(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
returnType = returnType.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data)
valueParameters.transformInplace(transformer, data) valueParameters.transformInplace(transformer, data)
return this return this
@@ -9,12 +9,12 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirResolvedType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
class FirResolvedTypeImpl( class FirResolvedTypeRefImpl(
override val session: FirSession, override val session: FirSession,
override val psi: PsiElement?, override val psi: PsiElement?,
override val type: ConeKotlinType, override val type: ConeKotlinType,
override val isMarkedNullable: Boolean, override val isMarkedNullable: Boolean,
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
) : FirResolvedType ) : FirResolvedTypeRef
@@ -9,7 +9,7 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
@@ -18,10 +18,10 @@ class FirTypeProjectionWithVarianceImpl(
override val session: FirSession, override val session: FirSession,
override val psi: PsiElement?, override val psi: PsiElement?,
override val variance: Variance, override val variance: Variance,
override var type: FirType override var typeRef: FirTypeRef
) : FirTypeProjectionWithVariance { ) : FirTypeProjectionWithVariance {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
type = type.transformSingle(transformer, data) typeRef = typeRef.transformSingle(transformer, data)
return this return this
} }
@@ -11,14 +11,14 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirQualifierPart import org.jetbrains.kotlin.fir.types.FirQualifierPart
import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirUserType import org.jetbrains.kotlin.fir.types.FirUserTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirUserTypeImpl( class FirUserTypeRefImpl(
session: FirSession, session: FirSession,
psi: PsiElement?, psi: PsiElement?,
isNullable: Boolean isNullable: Boolean
) : FirAbstractAnnotatedType(session, psi, isNullable), FirUserType { ) : FirAbstractAnnotatedTypeRef(session, psi, isNullable), FirUserTypeRef {
override val qualifier = mutableListOf<FirQualifierPart>() override val qualifier = mutableListOf<FirQualifierPart>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
@@ -26,6 +26,6 @@ class FirUserTypeImpl(
(part.typeArguments as MutableList<FirTypeProjection>).transformInplace(transformer, data) (part.typeArguments as MutableList<FirTypeProjection>).transformInplace(transformer, data)
} }
return super<FirAbstractAnnotatedType>.transformChildren(transformer, data) return super<FirAbstractAnnotatedTypeRef>.transformChildren(transformer, data)
} }
} }
@@ -300,46 +300,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTargetElement(labeledElement, data) return transformTargetElement(labeledElement, data)
} }
open fun transformType(type: FirType, data: D): CompositeTransformResult<FirType> {
return transformElement(type, data)
}
open fun transformDelegatedType(delegatedType: FirDelegatedType, data: D): CompositeTransformResult<FirType> {
return transformType(delegatedType, data)
}
open fun transformErrorType(errorType: FirErrorType, data: D): CompositeTransformResult<FirType> {
return transformType(errorType, data)
}
open fun transformImplicitType(implicitType: FirImplicitType, data: D): CompositeTransformResult<FirType> {
return transformType(implicitType, data)
}
open fun transformTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): CompositeTransformResult<FirType> {
return transformType(typeWithNullability, data)
}
open fun transformDynamicType(dynamicType: FirDynamicType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(dynamicType, data)
}
open fun transformFunctionType(functionType: FirFunctionType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(functionType, data)
}
open fun transformResolvedType(resolvedType: FirResolvedType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(resolvedType, data)
}
open fun transformResolvedFunctionType(resolvedFunctionType: FirResolvedFunctionType, data: D): CompositeTransformResult<FirType> {
return transformResolvedType(resolvedFunctionType, data)
}
open fun transformUserType(userType: FirUserType, data: D): CompositeTransformResult<FirType> {
return transformTypeWithNullability(userType, data)
}
open fun transformTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult<FirTypeProjection> { open fun transformTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult<FirTypeProjection> {
return transformElement(typeProjection, data) return transformElement(typeProjection, data)
} }
@@ -352,6 +312,46 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTypeProjection(typeProjectionWithVariance, data) return transformTypeProjection(typeProjectionWithVariance, data)
} }
open fun transformTypeRef(typeRef: FirTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformElement(typeRef, data)
}
open fun transformDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRef(delegatedTypeRef, data)
}
open fun transformErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRef(errorTypeRef, data)
}
open fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRef(implicitTypeRef, data)
}
open fun transformTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRef(typeRefWithNullability, data)
}
open fun transformDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRefWithNullability(dynamicTypeRef, data)
}
open fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRefWithNullability(functionTypeRef, data)
}
open fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRefWithNullability(resolvedTypeRef, data)
}
open fun transformResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformResolvedTypeRef(resolvedFunctionTypeRef, data)
}
open fun transformUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRefWithNullability(userTypeRef, data)
}
open fun <E : FirElement> transformWhenBranch(whenBranch: E, data: D): CompositeTransformResult<E> { open fun <E : FirElement> transformWhenBranch(whenBranch: E, data: D): CompositeTransformResult<E> {
return transformElement(whenBranch, data) return transformElement(whenBranch, data)
} }
@@ -448,16 +448,16 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDelegatedConstructorCall(delegatedConstructorCall, data) return transformDelegatedConstructorCall(delegatedConstructorCall, data)
} }
final override fun visitDelegatedType(delegatedType: FirDelegatedType, data: D): CompositeTransformResult<FirElement> { final override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformDelegatedType(delegatedType, data) return transformDelegatedTypeRef(delegatedTypeRef, data)
} }
final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): CompositeTransformResult<FirElement> { final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): CompositeTransformResult<FirElement> {
return transformDoWhileLoop(doWhileLoop, data) return transformDoWhileLoop(doWhileLoop, data)
} }
final override fun visitDynamicType(dynamicType: FirDynamicType, data: D): CompositeTransformResult<FirElement> { final override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformDynamicType(dynamicType, data) return transformDynamicTypeRef(dynamicTypeRef, data)
} }
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult<FirElement> { final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult<FirElement> {
@@ -472,8 +472,8 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformErrorExpression(errorExpression, data) return transformErrorExpression(errorExpression, data)
} }
final override fun visitErrorType(errorType: FirErrorType, data: D): CompositeTransformResult<FirElement> { final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformErrorType(errorType, data) return transformErrorTypeRef(errorTypeRef, data)
} }
final override fun visitExpression(expression: FirExpression, data: D): CompositeTransformResult<FirElement> { final override fun visitExpression(expression: FirExpression, data: D): CompositeTransformResult<FirElement> {
@@ -492,16 +492,16 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformFunctionCall(functionCall, data) return transformFunctionCall(functionCall, data)
} }
final override fun visitFunctionType(functionType: FirFunctionType, data: D): CompositeTransformResult<FirElement> { final override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformFunctionType(functionType, data) return transformFunctionTypeRef(functionTypeRef, data)
} }
final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult<FirElement> { final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult<FirElement> {
return transformGetClassCall(getClassCall, data) return transformGetClassCall(getClassCall, data)
} }
final override fun visitImplicitType(implicitType: FirImplicitType, data: D): CompositeTransformResult<FirElement> { final override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformImplicitType(implicitType, data) return transformImplicitTypeRef(implicitTypeRef, data)
} }
final override fun visitImport(import: FirImport, data: D): CompositeTransformResult<FirElement> { final override fun visitImport(import: FirImport, data: D): CompositeTransformResult<FirElement> {
@@ -592,16 +592,16 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformResolvedDeclarationStatus(resolvedDeclarationStatus, data) return transformResolvedDeclarationStatus(resolvedDeclarationStatus, data)
} }
final override fun visitResolvedFunctionType(resolvedFunctionType: FirResolvedFunctionType, data: D): CompositeTransformResult<FirElement> { final override fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformResolvedFunctionType(resolvedFunctionType, data) return transformResolvedFunctionTypeRef(resolvedFunctionTypeRef, data)
} }
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): CompositeTransformResult<FirElement> { final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): CompositeTransformResult<FirElement> {
return transformResolvedImport(resolvedImport, data) return transformResolvedImport(resolvedImport, data)
} }
final override fun visitResolvedType(resolvedType: FirResolvedType, data: D): CompositeTransformResult<FirElement> { final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformResolvedType(resolvedType, data) return transformResolvedTypeRef(resolvedTypeRef, data)
} }
final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): CompositeTransformResult<FirElement> { final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): CompositeTransformResult<FirElement> {
@@ -636,10 +636,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTryExpression(tryExpression, data) return transformTryExpression(tryExpression, data)
} }
final override fun visitType(type: FirType, data: D): CompositeTransformResult<FirElement> {
return transformType(type, data)
}
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirElement> { final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirElement> {
return transformTypeAlias(typeAlias, data) return transformTypeAlias(typeAlias, data)
} }
@@ -660,16 +656,20 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTypeProjectionWithVariance(typeProjectionWithVariance, data) return transformTypeProjectionWithVariance(typeProjectionWithVariance, data)
} }
final override fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): CompositeTransformResult<FirElement> { final override fun visitTypeRef(typeRef: FirTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformTypeWithNullability(typeWithNullability, data) return transformTypeRef(typeRef, data)
}
final override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult<FirElement> {
return transformTypeRefWithNullability(typeRefWithNullability, data)
} }
final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): CompositeTransformResult<FirElement> { final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): CompositeTransformResult<FirElement> {
return transformTypedDeclaration(typedDeclaration, data) return transformTypedDeclaration(typedDeclaration, data)
} }
final override fun visitUserType(userType: FirUserType, data: D): CompositeTransformResult<FirElement> { final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult<FirElement> {
return transformUserType(userType, data) return transformUserTypeRef(userTypeRef, data)
} }
final override fun visitValueParameter(valueParameter: FirValueParameter, data: D): CompositeTransformResult<FirElement> { final override fun visitValueParameter(valueParameter: FirValueParameter, data: D): CompositeTransformResult<FirElement> {
@@ -300,46 +300,6 @@ abstract class FirVisitor<out R, in D> {
return visitTargetElement(labeledElement, data) return visitTargetElement(labeledElement, data)
} }
open fun visitType(type: FirType, data: D): R {
return visitElement(type, data)
}
open fun visitDelegatedType(delegatedType: FirDelegatedType, data: D): R {
return visitType(delegatedType, data)
}
open fun visitErrorType(errorType: FirErrorType, data: D): R {
return visitType(errorType, data)
}
open fun visitImplicitType(implicitType: FirImplicitType, data: D): R {
return visitType(implicitType, data)
}
open fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: D): R {
return visitType(typeWithNullability, data)
}
open fun visitDynamicType(dynamicType: FirDynamicType, data: D): R {
return visitTypeWithNullability(dynamicType, data)
}
open fun visitFunctionType(functionType: FirFunctionType, data: D): R {
return visitTypeWithNullability(functionType, data)
}
open fun visitResolvedType(resolvedType: FirResolvedType, data: D): R {
return visitTypeWithNullability(resolvedType, data)
}
open fun visitResolvedFunctionType(resolvedFunctionType: FirResolvedFunctionType, data: D): R {
return visitResolvedType(resolvedFunctionType, data)
}
open fun visitUserType(userType: FirUserType, data: D): R {
return visitTypeWithNullability(userType, data)
}
open fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): R { open fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): R {
return visitElement(typeProjection, data) return visitElement(typeProjection, data)
} }
@@ -352,6 +312,46 @@ abstract class FirVisitor<out R, in D> {
return visitTypeProjection(typeProjectionWithVariance, data) return visitTypeProjection(typeProjectionWithVariance, data)
} }
open fun visitTypeRef(typeRef: FirTypeRef, data: D): R {
return visitElement(typeRef, data)
}
open fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): R {
return visitTypeRef(delegatedTypeRef, data)
}
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R {
return visitTypeRef(errorTypeRef, data)
}
open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): R {
return visitTypeRef(implicitTypeRef, data)
}
open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): R {
return visitTypeRef(typeRefWithNullability, data)
}
open fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): R {
return visitTypeRefWithNullability(dynamicTypeRef, data)
}
open fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): R {
return visitTypeRefWithNullability(functionTypeRef, data)
}
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R {
return visitTypeRefWithNullability(resolvedTypeRef, data)
}
open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): R {
return visitResolvedTypeRef(resolvedFunctionTypeRef, data)
}
open fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): R {
return visitTypeRefWithNullability(userTypeRef, data)
}
open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R { open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R {
return visitElement(whenBranch, data) return visitElement(whenBranch, data)
} }
@@ -300,46 +300,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTargetElement(labeledElement, null) visitTargetElement(labeledElement, null)
} }
open fun visitType(type: FirType) {
visitElement(type, null)
}
open fun visitDelegatedType(delegatedType: FirDelegatedType) {
visitType(delegatedType, null)
}
open fun visitErrorType(errorType: FirErrorType) {
visitType(errorType, null)
}
open fun visitImplicitType(implicitType: FirImplicitType) {
visitType(implicitType, null)
}
open fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability) {
visitType(typeWithNullability, null)
}
open fun visitDynamicType(dynamicType: FirDynamicType) {
visitTypeWithNullability(dynamicType, null)
}
open fun visitFunctionType(functionType: FirFunctionType) {
visitTypeWithNullability(functionType, null)
}
open fun visitResolvedType(resolvedType: FirResolvedType) {
visitTypeWithNullability(resolvedType, null)
}
open fun visitResolvedFunctionType(resolvedFunctionType: FirResolvedFunctionType) {
visitResolvedType(resolvedFunctionType, null)
}
open fun visitUserType(userType: FirUserType) {
visitTypeWithNullability(userType, null)
}
open fun visitTypeProjection(typeProjection: FirTypeProjection) { open fun visitTypeProjection(typeProjection: FirTypeProjection) {
visitElement(typeProjection, null) visitElement(typeProjection, null)
} }
@@ -352,6 +312,46 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTypeProjection(typeProjectionWithVariance, null) visitTypeProjection(typeProjectionWithVariance, null)
} }
open fun visitTypeRef(typeRef: FirTypeRef) {
visitElement(typeRef, null)
}
open fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef) {
visitTypeRef(delegatedTypeRef, null)
}
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) {
visitTypeRef(errorTypeRef, null)
}
open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) {
visitTypeRef(implicitTypeRef, null)
}
open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) {
visitTypeRef(typeRefWithNullability, null)
}
open fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef) {
visitTypeRefWithNullability(dynamicTypeRef, null)
}
open fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef) {
visitTypeRefWithNullability(functionTypeRef, null)
}
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
visitTypeRefWithNullability(resolvedTypeRef, null)
}
open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef) {
visitResolvedTypeRef(resolvedFunctionTypeRef, null)
}
open fun visitUserTypeRef(userTypeRef: FirUserTypeRef) {
visitTypeRefWithNullability(userTypeRef, null)
}
open fun visitWhenBranch(whenBranch: FirWhenBranch) { open fun visitWhenBranch(whenBranch: FirWhenBranch) {
visitElement(whenBranch, null) visitElement(whenBranch, null)
} }
@@ -448,16 +448,16 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitDelegatedConstructorCall(delegatedConstructorCall) visitDelegatedConstructorCall(delegatedConstructorCall)
} }
final override fun visitDelegatedType(delegatedType: FirDelegatedType, data: Nothing?) { final override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: Nothing?) {
visitDelegatedType(delegatedType) visitDelegatedTypeRef(delegatedTypeRef)
} }
final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: Nothing?) { final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: Nothing?) {
visitDoWhileLoop(doWhileLoop) visitDoWhileLoop(doWhileLoop)
} }
final override fun visitDynamicType(dynamicType: FirDynamicType, data: Nothing?) { final override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: Nothing?) {
visitDynamicType(dynamicType) visitDynamicTypeRef(dynamicTypeRef)
} }
final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) { final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) {
@@ -472,8 +472,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitErrorExpression(errorExpression) visitErrorExpression(errorExpression)
} }
final override fun visitErrorType(errorType: FirErrorType, data: Nothing?) { final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: Nothing?) {
visitErrorType(errorType) visitErrorTypeRef(errorTypeRef)
} }
final override fun visitExpression(expression: FirExpression, data: Nothing?) { final override fun visitExpression(expression: FirExpression, data: Nothing?) {
@@ -492,16 +492,16 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitFunctionCall(functionCall) visitFunctionCall(functionCall)
} }
final override fun visitFunctionType(functionType: FirFunctionType, data: Nothing?) { final override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?) {
visitFunctionType(functionType) visitFunctionTypeRef(functionTypeRef)
} }
final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Nothing?) { final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Nothing?) {
visitGetClassCall(getClassCall) visitGetClassCall(getClassCall)
} }
final override fun visitImplicitType(implicitType: FirImplicitType, data: Nothing?) { final override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Nothing?) {
visitImplicitType(implicitType) visitImplicitTypeRef(implicitTypeRef)
} }
final override fun visitImport(import: FirImport, data: Nothing?) { final override fun visitImport(import: FirImport, data: Nothing?) {
@@ -592,16 +592,16 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitResolvedDeclarationStatus(resolvedDeclarationStatus) visitResolvedDeclarationStatus(resolvedDeclarationStatus)
} }
final override fun visitResolvedFunctionType(resolvedFunctionType: FirResolvedFunctionType, data: Nothing?) { final override fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: Nothing?) {
visitResolvedFunctionType(resolvedFunctionType) visitResolvedFunctionTypeRef(resolvedFunctionTypeRef)
} }
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) { final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) {
visitResolvedImport(resolvedImport) visitResolvedImport(resolvedImport)
} }
final override fun visitResolvedType(resolvedType: FirResolvedType, data: Nothing?) { final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
visitResolvedType(resolvedType) visitResolvedTypeRef(resolvedTypeRef)
} }
final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: Nothing?) { final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: Nothing?) {
@@ -636,10 +636,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTryExpression(tryExpression) visitTryExpression(tryExpression)
} }
final override fun visitType(type: FirType, data: Nothing?) {
visitType(type)
}
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Nothing?) { final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Nothing?) {
visitTypeAlias(typeAlias) visitTypeAlias(typeAlias)
} }
@@ -660,16 +656,20 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTypeProjectionWithVariance(typeProjectionWithVariance) visitTypeProjectionWithVariance(typeProjectionWithVariance)
} }
final override fun visitTypeWithNullability(typeWithNullability: FirTypeWithNullability, data: Nothing?) { final override fun visitTypeRef(typeRef: FirTypeRef, data: Nothing?) {
visitTypeWithNullability(typeWithNullability) visitTypeRef(typeRef)
}
final override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: Nothing?) {
visitTypeRefWithNullability(typeRefWithNullability)
} }
final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: Nothing?) { final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: Nothing?) {
visitTypedDeclaration(typedDeclaration) visitTypedDeclaration(typedDeclaration)
} }
final override fun visitUserType(userType: FirUserType, data: Nothing?) { final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: Nothing?) {
visitUserType(userType) visitUserTypeRef(userTypeRef)
} }
final override fun visitValueParameter(valueParameter: FirValueParameter, data: Nothing?) { final override fun visitValueParameter(valueParameter: FirValueParameter, data: Nothing?) {
@@ -8,8 +8,8 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
import org.jetbrains.kotlin.fir.types.FirResolvedType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirType import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -65,18 +65,18 @@ fun doFirResolveTestBench(firFiles: List<FirFile>, transformers: List<FirTransfo
element.acceptChildren(this) element.acceptChildren(this)
} }
override fun visitType(type: FirType) { override fun visitTypeRef(typeRef: FirTypeRef) {
unresolvedTypes++ unresolvedTypes++
} }
override fun visitResolvedType(resolvedType: FirResolvedType) { override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
resolvedTypes++ resolvedTypes++
val type = resolvedType.type val type = resolvedTypeRef.type
if (type is ConeKotlinErrorType || type is ConeClassErrorType) { if (type is ConeKotlinErrorType || type is ConeClassErrorType) {
if (resolvedType.psi == null) { if (resolvedTypeRef.psi == null) {
implicitTypes++ implicitTypes++
} else { } else {
val psi = resolvedType.psi!! val psi = resolvedTypeRef.psi!!
val problem = "$type with psi `${psi.text}`" val problem = "$type with psi `${psi.text}`"
val document = try { val document = try {
fileDocumentManager.getDocument(psi.containingFile.virtualFile) fileDocumentManager.getDocument(psi.containingFile.virtualFile)