[FIR] Introduce FirSourceElement instead of FirElement as source in fir nodes

This commit is contained in:
Dmitriy Novozhilov
2019-10-25 16:20:57 +03:00
parent b93357be48
commit 0d15ff1ddd
265 changed files with 904 additions and 856 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.backend
import com.intellij.psi.PsiCompiledElement import com.intellij.psi.PsiCompiledElement
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.psi
import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
@@ -15,8 +15,11 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
import org.jetbrains.kotlin.fir.descriptors.FirPackageFragmentDescriptor import org.jetbrains.kotlin.fir.descriptors.FirPackageFragmentDescriptor
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.getOrPut
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
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
@@ -7,8 +7,7 @@ package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDescriptor
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope import org.jetbrains.kotlin.fir.resolve.buildUseSiteMemberScope
import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
@@ -29,7 +27,6 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope import org.jetbrains.kotlin.fir.scopes.impl.FirClassSubstitutionScope
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firProvider
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirSuperTypeScope
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
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.toFirSourceElement
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
@@ -175,7 +176,7 @@ class JavaSymbolProvider(
} }
} }
FirJavaClass( FirJavaClass(
(javaClass as? JavaElementImpl<*>)?.psi, session, (javaClass as? JavaElementImpl<*>)?.psi?.toFirSourceElement(), session,
firSymbol as FirClassSymbol, javaClass.name, firSymbol as FirClassSymbol, javaClass.name,
javaClass.visibility, javaClass.modality, javaClass.visibility, javaClass.modality,
javaClass.classKind, isTopLevel = isTopLevel, javaClass.classKind, isTopLevel = isTopLevel,
@@ -195,7 +196,7 @@ class JavaSymbolProvider(
val fieldSymbol = FirFieldSymbol(fieldId) val fieldSymbol = FirFieldSymbol(fieldId)
val returnType = javaField.type val returnType = javaField.type
val firJavaField = FirJavaField( val firJavaField = FirJavaField(
(javaField as? JavaElementImpl<*>)?.psi, this@JavaSymbolProvider.session, (javaField as? JavaElementImpl<*>)?.psi?.toFirSourceElement(), this@JavaSymbolProvider.session,
fieldSymbol, fieldName, fieldSymbol, fieldName,
javaField.visibility, javaField.modality, javaField.visibility, javaField.modality,
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack), returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack),
@@ -212,7 +213,7 @@ class JavaSymbolProvider(
val methodSymbol = FirNamedFunctionSymbol(methodId) val methodSymbol = FirNamedFunctionSymbol(methodId)
val returnType = javaMethod.returnType val returnType = javaMethod.returnType
val firJavaMethod = FirJavaMethod( val firJavaMethod = FirJavaMethod(
this@JavaSymbolProvider.session, (javaMethod as? JavaElementImpl<*>)?.psi, this@JavaSymbolProvider.session, (javaMethod as? JavaElementImpl<*>)?.psi?.toFirSourceElement(),
methodSymbol, methodName, methodSymbol, methodName,
javaMethod.visibility, javaMethod.modality, javaMethod.visibility, javaMethod.modality,
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack), returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack),
@@ -239,7 +240,7 @@ class JavaSymbolProvider(
val constructorSymbol = FirConstructorSymbol(constructorId) val constructorSymbol = FirConstructorSymbol(constructorId)
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack) val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
val firJavaConstructor = FirJavaConstructor( val firJavaConstructor = FirJavaConstructor(
psi, psi?.toFirSourceElement(),
this@JavaSymbolProvider.session, this@JavaSymbolProvider.session,
constructorSymbol, constructorSymbol,
visibility, visibility,
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.resolve.getClassDeclaredCallableSymbols
import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.toFirSourceElement
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
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
@@ -94,7 +95,7 @@ internal fun JavaClassifierType.toFirResolvedTypeRef(
): FirResolvedTypeRef { ): FirResolvedTypeRef {
val coneType = this.toConeKotlinTypeWithNullability(session, javaTypeParameterStack, isNullable = false) val coneType = this.toConeKotlinTypeWithNullability(session, javaTypeParameterStack, isNullable = false)
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
psi = null, type = coneType source = null, type = coneType
).apply { ).apply {
annotations += this@toFirResolvedTypeRef.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } annotations += this@toFirResolvedTypeRef.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }
} }
@@ -174,9 +175,9 @@ internal fun JavaAnnotation.toFirAnnotationCall(
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
): FirAnnotationCall { ): FirAnnotationCall {
return FirAnnotationCallImpl( return FirAnnotationCallImpl(
psi = null, useSiteTarget = null, source = null, useSiteTarget = null,
annotationTypeRef = FirResolvedTypeRefImpl( annotationTypeRef = FirResolvedTypeRefImpl(
psi = null, source = null,
type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false) type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false)
) )
).apply { ).apply {
@@ -198,7 +199,7 @@ internal fun JavaValueParameter.toFirValueParameters(
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
): FirValueParameter { ): FirValueParameter {
return FirJavaValueParameter( return FirJavaValueParameter(
session, (this as? JavaElementImpl<*>)?.psi, name ?: Name.special("<anonymous Java parameter>"), session, (this as? JavaElementImpl<*>)?.psi?.toFirSourceElement(), name ?: Name.special("<anonymous Java parameter>"),
returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack), returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack),
isVararg = isVararg isVararg = isVararg
).apply { ).apply {
@@ -312,7 +313,7 @@ private fun JavaType.toFirResolvedTypeRef(
): FirResolvedTypeRef { ): FirResolvedTypeRef {
if (this is JavaClassifierType) return toFirResolvedTypeRef(session, javaTypeParameterStack) if (this is JavaClassifierType) return toFirResolvedTypeRef(session, javaTypeParameterStack)
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
psi = null, type = ConeClassErrorType("Unexpected JavaType: $this") source = null, type = ConeClassErrorType("Unexpected JavaType: $this")
) )
} }
@@ -5,12 +5,12 @@
package org.jetbrains.kotlin.fir.java.declarations package org.jetbrains.kotlin.fir.java.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirJavaClass internal constructor( class FirJavaClass internal constructor(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val symbol: FirClassSymbol, override val symbol: FirClassSymbol,
override val name: Name, override val name: Name,
@@ -5,13 +5,12 @@
package org.jetbrains.kotlin.fir.java.declarations package org.jetbrains.kotlin.fir.java.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.CONSTRUCTOR_NAME import org.jetbrains.kotlin.fir.CONSTRUCTOR_NAME
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -30,7 +29,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class FirJavaConstructor( class FirJavaConstructor(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val symbol: FirConstructorSymbol, override val symbol: FirConstructorSymbol,
visibility: Visibility, visibility: Visibility,
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.java.declarations package org.jetbrains.kotlin.fir.java.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class FirJavaField( class FirJavaField(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val symbol: FirFieldSymbol, override val symbol: FirFieldSymbol,
override val name: Name, override val name: Name,
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.java.declarations package org.jetbrains.kotlin.fir.java.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.name.Name
class FirJavaMethod( class FirJavaMethod(
session: FirSession, session: FirSession,
psi: PsiElement?, source: FirSourceElement?,
symbol: FirNamedFunctionSymbol, symbol: FirNamedFunctionSymbol,
name: Name, name: Name,
visibility: Visibility, visibility: Visibility,
@@ -26,7 +26,7 @@ class FirJavaMethod(
returnTypeRef: FirJavaTypeRef, returnTypeRef: FirJavaTypeRef,
isStatic: Boolean isStatic: Boolean
) : FirSimpleFunctionImpl( ) : FirSimpleFunctionImpl(
psi, source,
session, session,
returnTypeRef, returnTypeRef,
null, null,
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.java.declarations package org.jetbrains.kotlin.fir.java.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
@@ -15,12 +15,12 @@ import org.jetbrains.kotlin.name.Name
class FirJavaValueParameter( class FirJavaValueParameter(
session: FirSession, session: FirSession,
psi: PsiElement?, source: FirSourceElement?,
name: Name, name: Name,
returnTypeRef: FirJavaTypeRef, returnTypeRef: FirJavaTypeRef,
isVararg: Boolean isVararg: Boolean
) : FirValueParameterImpl( ) : FirValueParameterImpl(
psi, source,
session, session,
returnTypeRef, returnTypeRef,
name, name,
@@ -10,7 +10,10 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.classId
import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
@@ -24,7 +27,9 @@ import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.toTypeProjection import org.jetbrains.kotlin.fir.resolve.toTypeProjection
import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.typeContext
@@ -85,7 +90,7 @@ private fun JavaType?.enhancePossiblyFlexible(
) )
FirResolvedTypeRefImpl( FirResolvedTypeRefImpl(
psi = null, source = null,
type = coneFlexibleOrSimpleType(session, lowerResult, upperResult) type = coneFlexibleOrSimpleType(session, lowerResult, upperResult)
).apply { ).apply {
this.annotations += annotations this.annotations += annotations
@@ -93,7 +98,7 @@ private fun JavaType?.enhancePossiblyFlexible(
} }
else -> { else -> {
val enhanced = type.toNotNullConeKotlinType(session, javaTypeParameterStack) val enhanced = type.toNotNullConeKotlinType(session, javaTypeParameterStack)
FirResolvedTypeRefImpl(psi = null, type = enhanced).apply { FirResolvedTypeRefImpl(source = null, type = enhanced).apply {
this.annotations += annotations this.annotations += annotations
} }
} }
@@ -22,7 +22,8 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
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.* import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
import org.jetbrains.kotlin.load.java.descriptors.NullDefaultValue import org.jetbrains.kotlin.load.java.descriptors.NullDefaultValue
@@ -84,7 +85,7 @@ class JavaClassEnhancementScope(
val symbol = FirFieldSymbol(original.callableId) val symbol = FirFieldSymbol(original.callableId)
with(firElement) { with(firElement) {
FirJavaField( FirJavaField(
firElement.psi, firElement.source,
this@JavaClassEnhancementScope.session, this@JavaClassEnhancementScope.session,
symbol, symbol,
name, name,
@@ -172,7 +173,7 @@ class JavaClassEnhancementScope(
val (newTypeRef, newDefaultValue) = newInfo val (newTypeRef, newDefaultValue) = newInfo
with(valueParameter) { with(valueParameter) {
FirValueParameterImpl( FirValueParameterImpl(
psi, this@JavaClassEnhancementScope.session, source, this@JavaClassEnhancementScope.session,
newTypeRef, this.name, newTypeRef, this.name,
FirVariableSymbol(this.name), FirVariableSymbol(this.name),
defaultValue ?: newDefaultValue, isCrossinline, isNoinline, isVararg defaultValue ?: newDefaultValue, isCrossinline, isNoinline, isVararg
@@ -192,7 +193,7 @@ class JavaClassEnhancementScope(
} }
if (firMethod.isPrimary) { if (firMethod.isPrimary) {
FirPrimaryConstructorImpl( FirPrimaryConstructorImpl(
firMethod.psi, firMethod.source,
this@JavaClassEnhancementScope.session, this@JavaClassEnhancementScope.session,
newReturnTypeRef, newReturnTypeRef,
null, null,
@@ -201,7 +202,7 @@ class JavaClassEnhancementScope(
) )
} else { } else {
FirConstructorImpl( FirConstructorImpl(
firMethod.psi, firMethod.source,
this@JavaClassEnhancementScope.session, this@JavaClassEnhancementScope.session,
newReturnTypeRef, newReturnTypeRef,
newReceiverTypeRef, newReceiverTypeRef,
@@ -215,7 +216,7 @@ class JavaClassEnhancementScope(
} }
} }
else -> FirSimpleFunctionImpl( else -> FirSimpleFunctionImpl(
firMethod.psi, firMethod.source,
this@JavaClassEnhancementScope.session, this@JavaClassEnhancementScope.session,
newReturnTypeRef, newReturnTypeRef,
newReceiverTypeRef, newReceiverTypeRef,
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.load.java.structure.JavaType
class FirJavaTypeRef( class FirJavaTypeRef(
annotations: List<FirAnnotationCall>, annotations: List<FirAnnotationCall>,
val type: JavaType val type: JavaType
) : FirUserTypeRefImpl(psi = null, isMarkedNullable = false) { ) : FirUserTypeRefImpl(source = null, isMarkedNullable = false) {
init { init {
this.annotations += annotations this.annotations += annotations
} }
@@ -6,10 +6,10 @@
package org.jetbrains.kotlin.fir.lightTree.fir.modifier package org.jetbrains.kotlin.fir.lightTree.fir.modifier
import com.intellij.lang.LighterASTNode import com.intellij.lang.LighterASTNode
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.CLASS_MODIFIER import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.CLASS_MODIFIER
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
class Modifier( class Modifier(
override val psi: PsiElement? = null, override val source: FirSourceElement? = null,
private val classModifiers: MutableList<ClassModifier> = mutableListOf(), private val classModifiers: MutableList<ClassModifier> = mutableListOf(),
private val memberModifiers: MutableList<MemberModifier> = mutableListOf(), private val memberModifiers: MutableList<MemberModifier> = mutableListOf(),
private val visibilityModifiers: MutableList<VisibilityModifier> = mutableListOf(), private val visibilityModifiers: MutableList<VisibilityModifier> = mutableListOf(),
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.lightTree.fir.modifier package org.jetbrains.kotlin.fir.lightTree.fir.modifier
import com.intellij.lang.LighterASTNode import com.intellij.lang.LighterASTNode
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
class TypeModifier( class TypeModifier(
override val psi: PsiElement? = null, override val source: FirSourceElement? = null,
var hasSuspend: Boolean = false var hasSuspend: Boolean = false
) : FirAbstractAnnotatedElement { ) : FirAbstractAnnotatedElement {
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.lightTree.fir.modifier package org.jetbrains.kotlin.fir.lightTree.fir.modifier
import com.intellij.lang.LighterASTNode import com.intellij.lang.LighterASTNode
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.REIFICATION_MODIFIER import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.REIFICATION_MODIFIER
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
class TypeParameterModifier( class TypeParameterModifier(
override val psi: PsiElement? = null, override val source: FirSourceElement? = null,
private val varianceModifiers: MutableList<VarianceModifier> = mutableListOf(), private val varianceModifiers: MutableList<VarianceModifier> = mutableListOf(),
private var reificationModifier: ReificationModifier? = null private var reificationModifier: ReificationModifier? = null
) : FirAbstractAnnotatedElement { ) : FirAbstractAnnotatedElement {
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.lightTree.fir.modifier package org.jetbrains.kotlin.fir.lightTree.fir.modifier
import com.intellij.lang.LighterASTNode import com.intellij.lang.LighterASTNode
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VARIANCE_MODIFIER import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VARIANCE_MODIFIER
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
class TypeProjectionModifier( class TypeProjectionModifier(
override val psi: PsiElement? = null, override val source: FirSourceElement? = null,
private val varianceModifiers: MutableList<VarianceModifier> = mutableListOf() private val varianceModifiers: MutableList<VarianceModifier> = mutableListOf()
) : FirAbstractAnnotatedElement { ) : FirAbstractAnnotatedElement {
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
@@ -8,9 +8,7 @@ package org.jetbrains.kotlin.fir.builder
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.KtNodeTypes.* import org.jetbrains.kotlin.KtNodeTypes.*
import org.jetbrains.kotlin.fir.FirFunctionTarget import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.FirLoopTarget
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunctionImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
@@ -97,9 +95,9 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
val KNPE = Name.identifier("KotlinNullPointerException") val KNPE = Name.identifier("KotlinNullPointerException")
} }
fun FirExpression.toReturn(basePsi: PsiElement? = psi, labelName: String? = null): FirReturnExpression { fun FirExpression.toReturn(baseSource: FirSourceElement? = source, labelName: String? = null): FirReturnExpression {
return FirReturnExpressionImpl( return FirReturnExpressionImpl(
basePsi, baseSource,
this this
).apply { ).apply {
target = FirFunctionTarget(labelName) target = FirFunctionTarget(labelName)
@@ -110,7 +108,7 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
} else { } else {
target.bind( target.bind(
FirErrorFunctionImpl( FirErrorFunctionImpl(
psi, source,
this@BaseFirBuilder.session, this@BaseFirBuilder.session,
"Cannot bind unlabeled return to a function", "Cannot bind unlabeled return to a function",
FirErrorFunctionSymbol() FirErrorFunctionSymbol()
@@ -136,7 +134,7 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
} }
target.bind( target.bind(
FirErrorFunctionImpl( FirErrorFunctionImpl(
psi, source,
this@BaseFirBuilder.session, this@BaseFirBuilder.session,
"Cannot bind label $labelName to a function", "Cannot bind label $labelName to a function",
FirErrorFunctionSymbol() FirErrorFunctionSymbol()
@@ -148,13 +146,13 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
fun KtClassOrObject?.toDelegatedSelfType(firClass: FirRegularClass): FirTypeRef { fun KtClassOrObject?.toDelegatedSelfType(firClass: FirRegularClass): FirTypeRef {
val typeParameters = firClass.typeParameters.map { val typeParameters = firClass.typeParameters.map {
FirTypeParameterImpl(it.psi, session, it.name, FirTypeParameterSymbol(), Variance.INVARIANT, false).apply { FirTypeParameterImpl(it.source, session, it.name, FirTypeParameterSymbol(), Variance.INVARIANT, false).apply {
this.bounds += it.bounds this.bounds += it.bounds
addDefaultBoundIfNecessary() addDefaultBoundIfNecessary()
} }
} }
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
this, this?.toFirSourceElement(),
ConeClassTypeImpl( ConeClassTypeImpl(
firClass.symbol.toLookupTag(), firClass.symbol.toLookupTag(),
typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(), typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(),
@@ -171,13 +169,14 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
} }
fun T?.bangBangToWhen(parent: KtUnaryExpression?, convert: T?.(String) -> FirExpression): FirWhenExpression { fun T?.bangBangToWhen(parent: KtUnaryExpression?, convert: T?.(String) -> FirExpression): FirWhenExpression {
val source = parent.getSourceOrNull()
return this.convert("No operand").generateNotNullOrOther( return this.convert("No operand").generateNotNullOrOther(
session, session,
FirThrowExpressionImpl( FirThrowExpressionImpl(
parent.getPsiOrNull(), FirFunctionCallImpl(parent.getPsiOrNull()).apply { source, FirFunctionCallImpl(source).apply {
calleeReference = FirSimpleNamedReference(parent, KNPE, null) calleeReference = FirSimpleNamedReference(source, KNPE, null)
} }
), "bangbang", parent ), "bangbang", source
) )
} }
@@ -197,7 +196,7 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
if (lastLoop != null) { if (lastLoop != null) {
target.bind(lastLoop) target.bind(lastLoop)
} else { } else {
target.bind(FirErrorLoop(expression.getPsiOrNull(), "Cannot bind unlabeled jump to a loop")) target.bind(FirErrorLoop(expression.getSourceOrNull(), "Cannot bind unlabeled jump to a loop"))
} }
} else { } else {
for (firLoop in context.firLoops.asReversed()) { for (firLoop in context.firLoops.asReversed()) {
@@ -206,14 +205,14 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
return this return this
} }
} }
target.bind(FirErrorLoop(expression.getPsiOrNull(), "Cannot bind label $labelName to a loop")) target.bind(FirErrorLoop(expression.getSourceOrNull(), "Cannot bind label $labelName to a loop"))
} }
return this return this
} }
/**** Conversion utils ****/ /**** Conversion utils ****/
private fun <T> T.getPsiOrNull(): PsiElement? { private fun <T> T.getSourceOrNull(): FirSourceElement? {
return if (this is PsiElement) this else null return if (this is PsiElement) FirPsiSourceElement(this) else null
} }
fun generateConstantExpressionByLiteral(expression: T): FirExpression { fun generateConstantExpressionByLiteral(expression: T): FirExpression {
@@ -231,34 +230,34 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
convertedText > Int.MAX_VALUE || convertedText < Int.MIN_VALUE) convertedText > Int.MAX_VALUE || convertedText < Int.MIN_VALUE)
) { ) {
FirConstExpressionImpl( FirConstExpressionImpl(
expression.getPsiOrNull(), IrConstKind.Long, convertedText, "Incorrect long: $text" expression.getSourceOrNull(), IrConstKind.Long, convertedText, "Incorrect long: $text"
) )
} else if (convertedText is Number) { } else if (convertedText is Number) {
// TODO: support byte / short // TODO: support byte / short
FirConstExpressionImpl( FirConstExpressionImpl(
expression.getPsiOrNull(), IrConstKind.Int, convertedText.toInt(), "Incorrect int: $text" expression.getSourceOrNull(), IrConstKind.Int, convertedText.toInt(), "Incorrect int: $text"
) )
} else { } else {
FirErrorExpressionImpl(expression.getPsiOrNull(), reason = "Incorrect constant expression: $text") FirErrorExpressionImpl(expression.getSourceOrNull(), reason = "Incorrect constant expression: $text")
} }
FLOAT_CONSTANT -> FLOAT_CONSTANT ->
if (convertedText is Float) { if (convertedText is Float) {
FirConstExpressionImpl( FirConstExpressionImpl(
expression.getPsiOrNull(), IrConstKind.Float, convertedText, "Incorrect float: $text" expression.getSourceOrNull(), IrConstKind.Float, convertedText, "Incorrect float: $text"
) )
} else { } else {
FirConstExpressionImpl( FirConstExpressionImpl(
expression.getPsiOrNull(), IrConstKind.Double, convertedText as Double, "Incorrect double: $text" expression.getSourceOrNull(), IrConstKind.Double, convertedText as Double, "Incorrect double: $text"
) )
} }
CHARACTER_CONSTANT -> CHARACTER_CONSTANT ->
FirConstExpressionImpl( FirConstExpressionImpl(
expression.getPsiOrNull(), IrConstKind.Char, text.parseCharacter(), "Incorrect character: $text" expression.getSourceOrNull(), IrConstKind.Char, text.parseCharacter(), "Incorrect character: $text"
) )
BOOLEAN_CONSTANT -> BOOLEAN_CONSTANT ->
FirConstExpressionImpl(expression.getPsiOrNull(), IrConstKind.Boolean, convertedText as Boolean) FirConstExpressionImpl(expression.getSourceOrNull(), IrConstKind.Boolean, convertedText as Boolean)
NULL -> NULL ->
FirConstExpressionImpl(expression.getPsiOrNull(), IrConstKind.Null, null) FirConstExpressionImpl(expression.getSourceOrNull(), IrConstKind.Null, null)
else -> else ->
throw AssertionError("Unknown literal type: $type, $text") throw AssertionError("Unknown literal type: $type, $text")
} }
@@ -278,11 +277,11 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
OPEN_QUOTE, CLOSING_QUOTE -> continue@L OPEN_QUOTE, CLOSING_QUOTE -> continue@L
LITERAL_STRING_TEMPLATE_ENTRY -> { LITERAL_STRING_TEMPLATE_ENTRY -> {
sb.append(entry.asText) sb.append(entry.asText)
FirConstExpressionImpl(entry.getPsiOrNull(), IrConstKind.String, entry.asText) FirConstExpressionImpl(entry.getSourceOrNull(), IrConstKind.String, entry.asText)
} }
ESCAPE_STRING_TEMPLATE_ENTRY -> { ESCAPE_STRING_TEMPLATE_ENTRY -> {
sb.append(entry.unescapedValue) sb.append(entry.unescapedValue)
FirConstExpressionImpl(entry.getPsiOrNull(), IrConstKind.String, entry.unescapedValue) FirConstExpressionImpl(entry.getSourceOrNull(), IrConstKind.String, entry.unescapedValue)
} }
SHORT_STRING_TEMPLATE_ENTRY, LONG_STRING_TEMPLATE_ENTRY -> { SHORT_STRING_TEMPLATE_ENTRY, LONG_STRING_TEMPLATE_ENTRY -> {
hasExpressions = true hasExpressions = true
@@ -291,7 +290,7 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
else -> { else -> {
hasExpressions = true hasExpressions = true
FirErrorExpressionImpl( FirErrorExpressionImpl(
entry.getPsiOrNull(), "Incorrect template entry: ${entry.asText}" entry.getSourceOrNull(), "Incorrect template entry: ${entry.asText}"
) )
} }
} }
@@ -302,14 +301,14 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
} }
else -> { else -> {
callCreated = true callCreated = true
FirStringConcatenationCallImpl(base).apply { FirStringConcatenationCallImpl(base?.toFirSourceElement()).apply {
arguments += result!! arguments += result!!
arguments += nextArgument arguments += nextArgument
} }
} }
} }
} }
return if (hasExpressions) result!! else FirConstExpressionImpl(base, IrConstKind.String, sb.toString()) return if (hasExpressions) result!! else FirConstExpressionImpl(base?.toFirSourceElement(), IrConstKind.String, sb.toString())
} }
/** /**
@@ -346,20 +345,21 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
if (argument == null) { if (argument == null) {
return FirErrorExpressionImpl(argument, "Inc/dec without operand") return FirErrorExpressionImpl(argument, "Inc/dec without operand")
} }
return FirBlockImpl(baseExpression).apply { val source = baseExpression?.toFirSourceElement()
return FirBlockImpl(source).apply {
val tempName = Name.special("<unary>") val tempName = Name.special("<unary>")
val temporaryVariable = generateTemporaryVariable(this@BaseFirBuilder.session, baseExpression, tempName, argument.convert()) val temporaryVariable = generateTemporaryVariable(this@BaseFirBuilder.session, source, tempName, argument.convert())
statements += temporaryVariable statements += temporaryVariable
val resultName = Name.special("<unary-result>") val resultName = Name.special("<unary-result>")
val resultInitializer = FirFunctionCallImpl(baseExpression).apply { val resultInitializer = FirFunctionCallImpl(source).apply {
this.calleeReference = FirSimpleNamedReference(baseExpression?.operationReference, callName, null) this.calleeReference = FirSimpleNamedReference(baseExpression?.operationReference?.toFirSourceElement(), callName, null)
this.explicitReceiver = generateResolvedAccessExpression(baseExpression, temporaryVariable) this.explicitReceiver = generateResolvedAccessExpression(source, temporaryVariable)
} }
val resultVar = generateTemporaryVariable(this@BaseFirBuilder.session, baseExpression, resultName, resultInitializer) val resultVar = generateTemporaryVariable(this@BaseFirBuilder.session, source, resultName, resultInitializer)
val assignment = argument.generateAssignment( val assignment = argument.generateAssignment(
baseExpression, source,
if (prefix && argument.elementType != REFERENCE_EXPRESSION) if (prefix && argument.elementType != REFERENCE_EXPRESSION)
generateResolvedAccessExpression(baseExpression, resultVar) generateResolvedAccessExpression(source, resultVar)
else else
resultInitializer, resultInitializer,
FirOperation.ASSIGN, convert FirOperation.ASSIGN, convert
@@ -377,14 +377,14 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
if (argument.elementType != REFERENCE_EXPRESSION) { if (argument.elementType != REFERENCE_EXPRESSION) {
statements += resultVar statements += resultVar
appendAssignment() appendAssignment()
statements += generateResolvedAccessExpression(baseExpression, resultVar) statements += generateResolvedAccessExpression(source, resultVar)
} else { } else {
appendAssignment() appendAssignment()
statements += generateAccessExpression(baseExpression, argument.getReferencedNameAsName()) statements += generateAccessExpression(source, argument.getReferencedNameAsName())
} }
} else { } else {
appendAssignment() appendAssignment()
statements += generateResolvedAccessExpression(baseExpression, temporaryVariable) statements += generateResolvedAccessExpression(source, temporaryVariable)
} }
} }
} }
@@ -397,10 +397,10 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
if (left != null) { if (left != null) {
when (tokenType) { when (tokenType) {
REFERENCE_EXPRESSION -> { REFERENCE_EXPRESSION -> {
return FirSimpleNamedReference(left.getPsiOrNull(), left.getReferencedNameAsName(), null) return FirSimpleNamedReference(left.getSourceOrNull(), left.getReferencedNameAsName(), null)
} }
THIS_EXPRESSION -> { THIS_EXPRESSION -> {
return FirExplicitThisReference(left.getPsiOrNull(), left.getLabelName()) return FirExplicitThisReference(left.getSourceOrNull(), left.getLabelName())
} }
DOT_QUALIFIED_EXPRESSION, SAFE_ACCESS_EXPRESSION -> { DOT_QUALIFIED_EXPRESSION, SAFE_ACCESS_EXPRESSION -> {
val firMemberAccess = left.convertQualified() val firMemberAccess = left.convertQualified()
@@ -410,7 +410,7 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
firMemberAccess.calleeReference firMemberAccess.calleeReference
} else { } else {
FirErrorNamedReferenceImpl( FirErrorNamedReferenceImpl(
left.getPsiOrNull(), "Unsupported qualified LValue: ${left.asText}" left.getSourceOrNull(), "Unsupported qualified LValue: ${left.asText}"
) )
} }
} }
@@ -419,28 +419,28 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
} }
} }
} }
return FirErrorNamedReferenceImpl(left.getPsiOrNull(), "Unsupported LValue: $tokenType") return FirErrorNamedReferenceImpl(left.getSourceOrNull(), "Unsupported LValue: $tokenType")
} }
fun T?.generateAssignment( fun T?.generateAssignment(
psi: PsiElement?, source: FirSourceElement?,
value: FirExpression, value: FirExpression,
operation: FirOperation, operation: FirOperation,
convert: T.() -> FirExpression convert: T.() -> FirExpression
): FirStatement { ): FirStatement {
val tokenType = this?.elementType val tokenType = this?.elementType
if (tokenType == PARENTHESIZED) { if (tokenType == PARENTHESIZED) {
return this!!.getExpressionInParentheses().generateAssignment(psi, value, operation, convert) return this!!.getExpressionInParentheses().generateAssignment(source, value, operation, convert)
} }
if (tokenType == ARRAY_ACCESS_EXPRESSION) { if (tokenType == ARRAY_ACCESS_EXPRESSION) {
val firArrayAccess = this!!.convert() as FirFunctionCallImpl val firArrayAccess = this!!.convert() as FirFunctionCallImpl
val arraySet = if (operation != FirOperation.ASSIGN) { val arraySet = if (operation != FirOperation.ASSIGN) {
FirArraySetCallImpl(psi, value, operation).apply { FirArraySetCallImpl(source, value, operation).apply {
indexes += firArrayAccess.arguments indexes += firArrayAccess.arguments
} }
} else { } else {
return firArrayAccess.apply { return firArrayAccess.apply {
calleeReference = FirSimpleNamedReference(psi, OperatorNameConventions.SET, null) calleeReference = FirSimpleNamedReference(source, OperatorNameConventions.SET, null)
arguments += value arguments += value
} }
} }
@@ -451,40 +451,40 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
} }
} }
val psiArrayExpression = firArrayAccess.explicitReceiver?.psi val psiArrayExpression = firArrayAccess.explicitReceiver?.psi
return FirBlockImpl(psiArrayExpression).apply { return FirBlockImpl(psiArrayExpression?.toFirSourceElement()).apply {
val name = Name.special("<array-set>") val name = Name.special("<array-set>")
statements += generateTemporaryVariable( statements += generateTemporaryVariable(
this@BaseFirBuilder.session, this@generateAssignment.getPsiOrNull(), name, firArrayAccess.explicitReceiver!! this@BaseFirBuilder.session, this@generateAssignment.getSourceOrNull(), name, firArrayAccess.explicitReceiver!!
) )
statements += arraySet.apply { lValue = FirSimpleNamedReference(psiArrayExpression, name, null) } statements += arraySet.apply { lValue = FirSimpleNamedReference(psiArrayExpression?.toFirSourceElement(), name, null) }
} }
} }
if (operation != FirOperation.ASSIGN && if (operation != FirOperation.ASSIGN &&
tokenType != REFERENCE_EXPRESSION && tokenType != THIS_EXPRESSION && tokenType != REFERENCE_EXPRESSION && tokenType != THIS_EXPRESSION &&
((tokenType != DOT_QUALIFIED_EXPRESSION && tokenType != SAFE_ACCESS_EXPRESSION) || this.selectorExpression?.elementType != REFERENCE_EXPRESSION) ((tokenType != DOT_QUALIFIED_EXPRESSION && tokenType != SAFE_ACCESS_EXPRESSION) || this.selectorExpression?.elementType != REFERENCE_EXPRESSION)
) { ) {
return FirBlockImpl(this.getPsiOrNull()).apply { return FirBlockImpl(this.getSourceOrNull()).apply {
val name = Name.special("<complex-set>") val name = Name.special("<complex-set>")
statements += generateTemporaryVariable( statements += generateTemporaryVariable(
this@BaseFirBuilder.session, this@generateAssignment.getPsiOrNull(), name, this@BaseFirBuilder.session, this@generateAssignment.getSourceOrNull(), name,
this@generateAssignment?.convert() this@generateAssignment?.convert()
?: FirErrorExpressionImpl(this.getPsiOrNull(), "No LValue in assignment") ?: FirErrorExpressionImpl(this.getSourceOrNull(), "No LValue in assignment")
) )
statements += FirVariableAssignmentImpl(psi, false, value, operation).apply { statements += FirVariableAssignmentImpl(source, false, value, operation).apply {
lValue = FirSimpleNamedReference(this.getPsiOrNull(), name, null) lValue = FirSimpleNamedReference(this.getSourceOrNull(), name, null)
} }
} }
} }
if (operation in FirOperation.ASSIGNMENTS && operation != FirOperation.ASSIGN) { if (operation in FirOperation.ASSIGNMENTS && operation != FirOperation.ASSIGN) {
return FirOperatorCallImpl(psi, operation).apply { return FirOperatorCallImpl(source, operation).apply {
// TODO: take good psi // TODO: take good psi
arguments += this@generateAssignment?.convert() ?: FirErrorExpressionImpl(null, "Unsupported left value of assignment: ${psi?.text}") arguments += this@generateAssignment?.convert() ?: FirErrorExpressionImpl(null, "Unsupported left value of assignment: ${source?.psi?.text}")
arguments += value arguments += value
} }
} }
return FirVariableAssignmentImpl(psi, false, value, operation).apply { return FirVariableAssignmentImpl(source, false, value, operation).apply {
lValue = initializeLValue(this@generateAssignment) { convert() as? FirQualifiedAccess } lValue = initializeLValue(this@generateAssignment) { convert() as? FirQualifiedAccess }
} }
} }
@@ -5,13 +5,10 @@
package org.jetbrains.kotlin.fir.builder package org.jetbrains.kotlin.fir.builder
import com.intellij.psi.PsiElement
import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirFunctionTarget import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirWhenSubject
import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.declarations.impl.*
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
@@ -136,41 +133,41 @@ fun IElementType.toFirOperation(): FirOperation =
} }
fun FirExpression.generateNotNullOrOther( fun FirExpression.generateNotNullOrOther(
session: FirSession, other: FirExpression, caseId: String, basePsi: KtElement? session: FirSession, other: FirExpression, caseId: String, baseSource: FirSourceElement?
): FirWhenExpression { ): FirWhenExpression {
val subjectName = Name.special("<$caseId>") val subjectName = Name.special("<$caseId>")
val subjectVariable = generateTemporaryVariable(session, basePsi, subjectName, this) val subjectVariable = generateTemporaryVariable(session, baseSource, subjectName, this)
val subject = FirWhenSubject() val subject = FirWhenSubject()
val subjectExpression = FirWhenSubjectExpressionImpl(basePsi, subject) val subjectExpression = FirWhenSubjectExpressionImpl(baseSource, subject)
return FirWhenExpressionImpl( return FirWhenExpressionImpl(
basePsi, this, subjectVariable baseSource, this, subjectVariable
).apply { ).apply {
subject.bind(this) subject.bind(this)
branches += FirWhenBranchImpl( branches += FirWhenBranchImpl(
basePsi, baseSource,
FirOperatorCallImpl(basePsi, FirOperation.EQ).apply { FirOperatorCallImpl(baseSource, FirOperation.EQ).apply {
arguments += subjectExpression arguments += subjectExpression
arguments += FirConstExpressionImpl(basePsi, IrConstKind.Null, null) arguments += FirConstExpressionImpl(baseSource, IrConstKind.Null, null)
}, },
FirSingleExpressionBlock(other) FirSingleExpressionBlock(other)
) )
branches += FirWhenBranchImpl( branches += FirWhenBranchImpl(
other.psi, FirElseIfTrueCondition(basePsi), other.source, FirElseIfTrueCondition(baseSource),
FirSingleExpressionBlock( FirSingleExpressionBlock(
generateResolvedAccessExpression(basePsi, subjectVariable) generateResolvedAccessExpression(baseSource, subjectVariable)
) )
) )
} }
} }
fun FirExpression.generateLazyLogicalOperation( fun FirExpression.generateLazyLogicalOperation(
other: FirExpression, isAnd: Boolean, basePsi: KtElement? other: FirExpression, isAnd: Boolean, baseSource: FirSourceElement?
): FirBinaryLogicExpression { ): FirBinaryLogicExpression {
val kind = if (isAnd) val kind = if (isAnd)
LogicOperationKind.AND LogicOperationKind.AND
else else
LogicOperationKind.OR LogicOperationKind.OR
return FirBinaryLogicExpressionImpl(basePsi, this, other, kind) return FirBinaryLogicExpressionImpl(baseSource, this, other, kind)
} }
internal fun KtWhenCondition.toFirWhenCondition( internal fun KtWhenCondition.toFirWhenCondition(
@@ -178,11 +175,11 @@ internal fun KtWhenCondition.toFirWhenCondition(
convert: KtExpression?.(String) -> FirExpression, convert: KtExpression?.(String) -> FirExpression,
toFirOrErrorTypeRef: KtTypeReference?.() -> FirTypeRef toFirOrErrorTypeRef: KtTypeReference?.() -> FirTypeRef
): FirExpression { ): FirExpression {
val firSubjectExpression = FirWhenSubjectExpressionImpl(this, subject) val firSubjectExpression = FirWhenSubjectExpressionImpl(this.toFirSourceElement(), subject)
return when (this) { return when (this) {
is KtWhenConditionWithExpression -> { is KtWhenConditionWithExpression -> {
FirOperatorCallImpl( FirOperatorCallImpl(
expression, expression?.toFirSourceElement(),
FirOperation.EQ FirOperation.EQ
).apply { ).apply {
arguments += firSubjectExpression arguments += firSubjectExpression
@@ -195,20 +192,21 @@ internal fun KtWhenCondition.toFirWhenCondition(
} }
is KtWhenConditionIsPattern -> { is KtWhenConditionIsPattern -> {
FirTypeOperatorCallImpl( FirTypeOperatorCallImpl(
typeReference, if (isNegated) FirOperation.NOT_IS else FirOperation.IS, typeReference?.toFirSourceElement(),
if (isNegated) FirOperation.NOT_IS else FirOperation.IS,
typeReference.toFirOrErrorTypeRef() typeReference.toFirOrErrorTypeRef()
).apply { ).apply {
arguments += firSubjectExpression arguments += firSubjectExpression
} }
} }
else -> { else -> {
FirErrorExpressionImpl(this, "Unsupported when condition: ${this.javaClass}") FirErrorExpressionImpl(this.toFirSourceElement(), "Unsupported when condition: ${this.javaClass}")
} }
} }
} }
internal fun Array<KtWhenCondition>.toFirWhenCondition( internal fun Array<KtWhenCondition>.toFirWhenCondition(
basePsi: KtElement, baseSource: FirSourceElement?,
subject: FirWhenSubject, subject: FirWhenSubject,
convert: KtExpression?.(String) -> FirExpression, convert: KtExpression?.(String) -> FirExpression,
toFirOrErrorTypeRef: KtTypeReference?.() -> FirTypeRef toFirOrErrorTypeRef: KtTypeReference?.() -> FirTypeRef
@@ -219,7 +217,7 @@ internal fun Array<KtWhenCondition>.toFirWhenCondition(
firCondition = when (firCondition) { firCondition = when (firCondition) {
null -> firConditionElement null -> firConditionElement
else -> firCondition.generateLazyLogicalOperation( else -> firCondition.generateLazyLogicalOperation(
firConditionElement, false, basePsi firConditionElement, false, baseSource
) )
} }
} }
@@ -232,26 +230,28 @@ fun FirExpression.generateContainsOperation(
base: KtExpression?, base: KtExpression?,
operationReference: KtOperationReferenceExpression? operationReference: KtOperationReferenceExpression?
): FirFunctionCall { ): FirFunctionCall {
val containsCall = FirFunctionCallImpl(base).apply { val baseSource = base?.toFirSourceElement()
calleeReference = FirSimpleNamedReference(operationReference, OperatorNameConventions.CONTAINS, null) val operationReferenceSource = operationReference?.toFirSourceElement()
val containsCall = FirFunctionCallImpl(baseSource).apply {
calleeReference = FirSimpleNamedReference(operationReferenceSource, OperatorNameConventions.CONTAINS, null)
explicitReceiver = this@generateContainsOperation explicitReceiver = this@generateContainsOperation
arguments += argument arguments += argument
} }
if (!inverted) return containsCall if (!inverted) return containsCall
return FirFunctionCallImpl(base).apply { return FirFunctionCallImpl(baseSource).apply {
calleeReference = FirSimpleNamedReference(operationReference, OperatorNameConventions.NOT, null) calleeReference = FirSimpleNamedReference(operationReferenceSource, OperatorNameConventions.NOT, null)
explicitReceiver = containsCall explicitReceiver = containsCall
} }
} }
fun generateAccessExpression(psi: PsiElement?, name: Name): FirQualifiedAccessExpression = fun generateAccessExpression(source: FirSourceElement?, name: Name): FirQualifiedAccessExpression =
FirQualifiedAccessExpressionImpl(psi).apply { FirQualifiedAccessExpressionImpl(source).apply {
calleeReference = FirSimpleNamedReference(psi, name, null) calleeReference = FirSimpleNamedReference(source, name, null)
} }
fun generateResolvedAccessExpression(psi: PsiElement?, variable: FirVariable<*>): FirQualifiedAccessExpression = fun generateResolvedAccessExpression(source: FirSourceElement?, variable: FirVariable<*>): FirQualifiedAccessExpression =
FirQualifiedAccessExpressionImpl(psi).apply { FirQualifiedAccessExpressionImpl(source).apply {
calleeReference = FirResolvedNamedReferenceImpl(psi, variable.name, variable.symbol) calleeReference = FirResolvedNamedReferenceImpl(source, variable.name, variable.symbol)
} }
internal fun generateDestructuringBlock( internal fun generateDestructuringBlock(
@@ -262,19 +262,20 @@ internal fun generateDestructuringBlock(
extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit, extractAnnotationsTo: KtAnnotated.(FirAbstractAnnotatedElement) -> Unit,
toFirOrImplicitTypeRef: KtTypeReference?.() -> FirTypeRef toFirOrImplicitTypeRef: KtTypeReference?.() -> FirTypeRef
): FirExpression { ): FirExpression {
return FirBlockImpl(multiDeclaration).apply { return FirBlockImpl(multiDeclaration.toFirSourceElement()).apply {
if (tmpVariable) { if (tmpVariable) {
statements += container statements += container
} }
val isVar = multiDeclaration.isVar val isVar = multiDeclaration.isVar
for ((index, entry) in multiDeclaration.entries.withIndex()) { for ((index, entry) in multiDeclaration.entries.withIndex()) {
val entrySource = entry.toFirSourceElement()
statements += FirPropertyImpl( statements += FirPropertyImpl(
entry, entrySource,
session, session,
entry.typeReference.toFirOrImplicitTypeRef(), entry.typeReference.toFirOrImplicitTypeRef(),
null, null,
entry.nameAsSafeName, entry.nameAsSafeName,
FirComponentCallImpl(entry, generateResolvedAccessExpression(entry, container), index + 1), FirComponentCallImpl(entrySource, generateResolvedAccessExpression(entrySource, container), index + 1),
null, null,
isVar, isVar,
FirPropertySymbol(CallableId(entry.nameAsSafeName)), // TODO? FirPropertySymbol(CallableId(entry.nameAsSafeName)), // TODO?
@@ -289,12 +290,12 @@ internal fun generateDestructuringBlock(
} }
fun generateTemporaryVariable( fun generateTemporaryVariable(
session: FirSession, psi: PsiElement?, name: Name, initializer: FirExpression session: FirSession, source: FirSourceElement?, name: Name, initializer: FirExpression
): FirVariable<*> = ): FirVariable<*> =
FirPropertyImpl( FirPropertyImpl(
psi, source,
session, session,
FirImplicitTypeRefImpl(psi), FirImplicitTypeRefImpl(source),
null, null,
name, name,
initializer, initializer,
@@ -308,8 +309,8 @@ fun generateTemporaryVariable(
} }
fun generateTemporaryVariable( fun generateTemporaryVariable(
session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression session: FirSession, source: FirSourceElement?, specialName: String, initializer: FirExpression
): FirVariable<*> = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer) ): FirVariable<*> = generateTemporaryVariable(session, source, Name.special("<$specialName>"), initializer)
fun FirModifiableVariable<*>.generateAccessorsByDelegate(session: FirSession, member: Boolean, stubMode: Boolean) { fun FirModifiableVariable<*>.generateAccessorsByDelegate(session: FirSession, member: Boolean, stubMode: Boolean) {
val variable = this as FirVariable<*> val variable = this as FirVariable<*>
@@ -385,7 +386,7 @@ fun FirModifiableVariable<*>.generateAccessorsByDelegate(session: FirSession, me
arguments += thisRef() arguments += thisRef()
arguments += propertyRef() arguments += propertyRef()
arguments += FirQualifiedAccessExpressionImpl(null).apply { arguments += FirQualifiedAccessExpressionImpl(null).apply {
calleeReference = FirResolvedNamedReferenceImpl(psi, DELEGATED_SETTER_PARAM, parameter.symbol) calleeReference = FirResolvedNamedReferenceImpl(source, DELEGATED_SETTER_PARAM, parameter.symbol)
} }
} }
) )
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.references.impl.FirResolvedNamedReferenceImpl
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.toFirSourceElement
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -49,22 +50,23 @@ fun List<Pair<KtParameter?, FirProperty>>.generateComponentFunctions(
isExternal = false isExternal = false
isSuspend = false isSuspend = false
} }
val parameterSource = ktParameter?.toFirSourceElement()
firClass.addDeclaration( firClass.addDeclaration(
FirSimpleFunctionImpl( FirSimpleFunctionImpl(
ktParameter, session, FirImplicitTypeRefImpl(ktParameter), parameterSource, session, FirImplicitTypeRefImpl(parameterSource),
null, name, status, symbol null, name, status, symbol
).apply { ).apply {
val componentFunction = this val componentFunction = this
body = FirSingleExpressionBlock( body = FirSingleExpressionBlock(
FirReturnExpressionImpl( FirReturnExpressionImpl(
ktParameter, parameterSource,
FirQualifiedAccessExpressionImpl(ktParameter).apply { FirQualifiedAccessExpressionImpl(parameterSource).apply {
val parameterName = firProperty.name val parameterName = firProperty.name
dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply { dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply {
typeRef = firPrimaryConstructor.returnTypeRef typeRef = firPrimaryConstructor.returnTypeRef
} }
calleeReference = FirResolvedNamedReferenceImpl( calleeReference = FirResolvedNamedReferenceImpl(
ktParameter, parameterSource,
parameterName, firProperty.symbol parameterName, firProperty.symbol
) )
} }
@@ -98,7 +100,7 @@ fun List<Pair<KtParameter?, FirProperty>>.generateCopyFunction(
} }
firClass.addDeclaration( firClass.addDeclaration(
FirSimpleFunctionImpl( FirSimpleFunctionImpl(
classOrObject, classOrObject?.toFirSourceElement(),
session, session,
firPrimaryConstructor.returnTypeRef, firPrimaryConstructor.returnTypeRef,
null, null,
@@ -108,15 +110,16 @@ fun List<Pair<KtParameter?, FirProperty>>.generateCopyFunction(
).apply { ).apply {
for ((ktParameter, firProperty) in this@generateCopyFunction) { for ((ktParameter, firProperty) in this@generateCopyFunction) {
val name = firProperty.name val name = firProperty.name
val parameterSource = ktParameter?.toFirSourceElement()
valueParameters += FirValueParameterImpl( valueParameters += FirValueParameterImpl(
ktParameter, session, firProperty.returnTypeRef, parameterSource, session, firProperty.returnTypeRef,
name, name,
FirVariableSymbol(name), FirVariableSymbol(name),
FirQualifiedAccessExpressionImpl(ktParameter).apply { FirQualifiedAccessExpressionImpl(parameterSource).apply {
dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply { dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply {
typeRef = firPrimaryConstructor.returnTypeRef typeRef = firPrimaryConstructor.returnTypeRef
} }
calleeReference = FirResolvedNamedReferenceImpl(ktParameter, name, firProperty.symbol) calleeReference = FirResolvedNamedReferenceImpl(parameterSource, name, firProperty.symbol)
}, },
isCrossinline = false, isNoinline = false, isVararg = false isCrossinline = false, isNoinline = false, isVararg = false
) )
@@ -98,27 +98,27 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
this.accept(this@Visitor, Unit) as R this.accept(this@Visitor, Unit) as R
private fun KtTypeReference?.toFirOrImplicitType(): FirTypeRef = private fun KtTypeReference?.toFirOrImplicitType(): FirTypeRef =
convertSafe() ?: FirImplicitTypeRefImpl(this) convertSafe() ?: FirImplicitTypeRefImpl(this?.toFirSourceElement())
private fun KtTypeReference?.toFirOrUnitType(): FirTypeRef = private fun KtTypeReference?.toFirOrUnitType(): FirTypeRef =
convertSafe() ?: implicitUnitType convertSafe() ?: implicitUnitType
private fun KtTypeReference?.toFirOrErrorType(): FirTypeRef = private fun KtTypeReference?.toFirOrErrorType(): FirTypeRef =
convertSafe() ?: FirErrorTypeRefImpl(this, if (this == null) "Incomplete code" else "Conversion failed") convertSafe() ?: FirErrorTypeRefImpl(this?.toFirSourceElement(), 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 =
if (stubMode) FirExpressionStub(null) if (stubMode) FirExpressionStub(null)
else with(this()) { else with(this()) {
convertSafe<FirExpression>() ?: FirErrorExpressionImpl(this, errorReason) convertSafe<FirExpression>() ?: FirErrorExpressionImpl(this?.toFirSourceElement(), errorReason)
} }
private fun KtExpression?.toFirExpression(errorReason: String): FirExpression = private fun KtExpression?.toFirExpression(errorReason: String): FirExpression =
if (stubMode) FirExpressionStub(null) if (stubMode) FirExpressionStub(null)
else convertSafe<FirExpression>() ?: FirErrorExpressionImpl(this, errorReason) else convertSafe<FirExpression>() ?: FirErrorExpressionImpl(this?.toFirSourceElement(), errorReason)
private fun KtExpression.toFirStatement(errorReason: String): FirStatement = private fun KtExpression.toFirStatement(errorReason: String): FirStatement =
convertSafe() ?: FirErrorExpressionImpl(this, errorReason) convertSafe() ?: FirErrorExpressionImpl(this.toFirSourceElement(), errorReason)
private fun KtExpression.toFirStatement(): FirStatement = private fun KtExpression.toFirStatement(): FirStatement =
convert() convert()
@@ -129,7 +129,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
return when (this) { return when (this) {
is KtSecondaryConstructor -> toFirConstructor( is KtSecondaryConstructor -> toFirConstructor(
delegatedSuperType, delegatedSuperType,
delegatedSelfType ?: FirErrorTypeRefImpl(this, "Constructor in object"), delegatedSelfType ?: FirErrorTypeRefImpl(this.toFirSourceElement(), "Constructor in object"),
owner, owner,
hasPrimaryConstructor hasPrimaryConstructor
) )
@@ -154,17 +154,17 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
hasBlockBody() -> if (!stubMode) { hasBlockBody() -> if (!stubMode) {
bodyBlockExpression?.accept(this@Visitor, Unit) as? FirBlock bodyBlockExpression?.accept(this@Visitor, Unit) as? FirBlock
} else { } else {
FirSingleExpressionBlock(FirExpressionStub(this).toReturn()) FirSingleExpressionBlock(FirExpressionStub(this.toFirSourceElement()).toReturn())
} }
else -> { else -> {
val result = { bodyExpression }.toFirExpression("Function has no body (but should)") val result = { bodyExpression }.toFirExpression("Function has no body (but should)")
// basePsi is null, because 'return' is synthetic & should not be bound to some PSI // basePsi is null, because 'return' is synthetic & should not be bound to some PSI
FirSingleExpressionBlock(result.toReturn(basePsi = null)) FirSingleExpressionBlock(result.toReturn(baseSource = null))
} }
} }
private fun ValueArgument?.toFirExpression(): FirExpression { private fun ValueArgument?.toFirExpression(): FirExpression {
this ?: return FirErrorExpressionImpl(this as? KtElement, "No argument given") this ?: return FirErrorExpressionImpl((this as? KtElement)?.toFirSourceElement(), "No argument given")
val name = this.getArgumentName()?.asName val name = this.getArgumentName()?.asName
val expression = this.getArgumentExpression() val expression = this.getArgumentExpression()
val firExpression = when (expression) { val firExpression = when (expression) {
@@ -178,8 +178,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
val isSpread = getSpreadElement() != null val isSpread = getSpreadElement() != null
return when { return when {
name != null -> FirNamedArgumentExpressionImpl(expression, firExpression, isSpread, name) name != null -> FirNamedArgumentExpressionImpl(expression?.toFirSourceElement(), firExpression, isSpread, name)
isSpread -> FirSpreadArgumentExpressionImpl(expression, firExpression) isSpread -> FirSpreadArgumentExpressionImpl(expression?.toFirSourceElement(), firExpression)
else -> firExpression else -> firExpression
} }
} }
@@ -190,14 +190,16 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
isGetter: Boolean isGetter: Boolean
): FirPropertyAccessor { ): FirPropertyAccessor {
if (this == null) { if (this == null) {
val propertySource = property.toFirSourceElement()
return if (isGetter) { return if (isGetter) {
FirDefaultPropertyGetter(property, session, propertyTypeRef, property.visibility) FirDefaultPropertyGetter(propertySource, session, propertyTypeRef, property.visibility)
} else { } else {
FirDefaultPropertySetter(property, session, propertyTypeRef, property.visibility) FirDefaultPropertySetter(propertySource, session, propertyTypeRef, property.visibility)
} }
} }
val source = this.toFirSourceElement()
val firAccessor = FirPropertyAccessorImpl( val firAccessor = FirPropertyAccessorImpl(
this, source,
session, session,
if (isGetter) { if (isGetter) {
returnTypeReference?.convertSafe() ?: propertyTypeRef returnTypeReference?.convertSafe() ?: propertyTypeRef
@@ -213,7 +215,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
extractValueParametersTo(firAccessor, propertyTypeRef) extractValueParametersTo(firAccessor, propertyTypeRef)
if (!isGetter && firAccessor.valueParameters.isEmpty()) { if (!isGetter && firAccessor.valueParameters.isEmpty()) {
firAccessor.valueParameters += FirDefaultSetterValueParameter( firAccessor.valueParameters += FirDefaultSetterValueParameter(
this, source,
session, session,
propertyTypeRef, propertyTypeRef,
FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER)
@@ -227,7 +229,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
private fun KtParameter.toFirValueParameter(defaultTypeRef: FirTypeRef? = null): FirValueParameter { private fun KtParameter.toFirValueParameter(defaultTypeRef: FirTypeRef? = null): FirValueParameter {
val name = nameAsSafeName val name = nameAsSafeName
val firValueParameter = FirValueParameterImpl( val firValueParameter = FirValueParameterImpl(
this, this.toFirSourceElement(),
session, session,
when { when {
typeReference != null -> typeReference.toFirOrErrorType() typeReference != null -> typeReference.toFirOrErrorType()
@@ -257,15 +259,17 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
isConst = false isConst = false
isLateInit = false isLateInit = false
} }
val parameterSource = this.toFirSourceElement()
val propertySource = this@toFirProperty.toFirSourceElement()
val firProperty = FirPropertyImpl( val firProperty = FirPropertyImpl(
this, parameterSource,
session, session,
type, type,
null, null,
nameAsSafeName, nameAsSafeName,
FirQualifiedAccessExpressionImpl(this).apply { FirQualifiedAccessExpressionImpl(parameterSource).apply {
calleeReference = FirPropertyFromParameterResolvedNamedReference( calleeReference = FirPropertyFromParameterResolvedNamedReference(
this@toFirProperty, nameAsSafeName, firParameter.symbol propertySource, nameAsSafeName, firParameter.symbol
) )
}, },
null, null,
@@ -274,8 +278,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
false, false,
status status
).apply { ).apply {
getter = FirDefaultPropertyGetter(this@toFirProperty, this@RawFirBuilder.session, type, visibility) getter = FirDefaultPropertyGetter(propertySource, this@RawFirBuilder.session, type, visibility)
setter = if (isMutable) FirDefaultPropertySetter(this@toFirProperty, this@RawFirBuilder.session, type, visibility) else null setter = if (isMutable) FirDefaultPropertySetter(propertySource, this@RawFirBuilder.session, type, visibility) else null
} }
extractAnnotationsTo(firProperty) extractAnnotationsTo(firProperty)
return firProperty return firProperty
@@ -306,7 +310,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
for (argument in this.valueArguments) { for (argument in this.valueArguments) {
val argumentExpression = argument.toFirExpression() val argumentExpression = argument.toFirExpression()
container.arguments += when (argument) { container.arguments += when (argument) {
is KtLambdaArgument -> FirLambdaArgumentExpressionImpl(argument, argumentExpression) is KtLambdaArgument -> FirLambdaArgumentExpressionImpl(argument.toFirSourceElement(), argumentExpression)
else -> argumentExpression else -> argumentExpression
} }
} }
@@ -369,9 +373,10 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
delegatedSelfTypeRef: FirTypeRef, delegatedSelfTypeRef: FirTypeRef,
owner: KtClassOrObject owner: KtClassOrObject
): FirConstructor { ): FirConstructor {
val constructorCallee = superTypeCallEntry?.calleeExpression val constructorCallee = superTypeCallEntry?.calleeExpression?.toFirSourceElement()
val constructorSource = (this ?: owner).toFirSourceElement()
val firDelegatedCall = FirDelegatedConstructorCallImpl( val firDelegatedCall = FirDelegatedConstructorCallImpl(
constructorCallee ?: (this ?: owner), constructorCallee ?: constructorSource,
delegatedSuperTypeRef, delegatedSuperTypeRef,
isThis = false isThis = false
).apply { ).apply {
@@ -393,7 +398,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
isInner = owner.hasModifier(INNER_KEYWORD) isInner = owner.hasModifier(INNER_KEYWORD)
} }
val firConstructor = FirPrimaryConstructorImpl( val firConstructor = FirPrimaryConstructorImpl(
this ?: owner, constructorSource,
session, session,
delegatedSelfTypeRef, delegatedSelfTypeRef,
null, null,
@@ -410,13 +415,13 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitKtFile(file: KtFile, data: Unit): FirElement { override fun visitKtFile(file: KtFile, data: Unit): FirElement {
context.packageFqName = file.packageFqName context.packageFqName = file.packageFqName
val firFile = FirFileImpl(file, session, file.name, context.packageFqName) val firFile = FirFileImpl(file.toFirSourceElement(), session, file.name, context.packageFqName)
for (annotationEntry in file.annotationEntries) { for (annotationEntry in file.annotationEntries) {
firFile.annotations += annotationEntry.convert<FirAnnotationCall>() firFile.annotations += annotationEntry.convert<FirAnnotationCall>()
} }
for (importDirective in file.importDirectives) { for (importDirective in file.importDirectives) {
firFile.imports += FirImportImpl( firFile.imports += FirImportImpl(
importDirective, importDirective.toFirSourceElement(),
importDirective.importedFqName, importDirective.importedFqName,
importDirective.isAllUnder, importDirective.isAllUnder,
importDirective.aliasName?.let { Name.identifier(it) } importDirective.aliasName?.let { Name.identifier(it) }
@@ -431,7 +436,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement { override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement {
return withChildClassName(enumEntry.nameAsSafeName) { return withChildClassName(enumEntry.nameAsSafeName) {
val firEnumEntry = FirEnumEntryImpl( val firEnumEntry = FirEnumEntryImpl(
enumEntry, enumEntry.toFirSourceElement(),
session, session,
enumEntry.nameAsSafeName, enumEntry.nameAsSafeName,
FirClassSymbol(context.currentClassId) FirClassSymbol(context.currentClassId)
@@ -476,7 +481,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
val firClass = if (status.modality == Modality.SEALED) { val firClass = if (status.modality == Modality.SEALED) {
FirSealedClassImpl( FirSealedClassImpl(
classOrObject, classOrObject.toFirSourceElement(),
session, session,
classOrObject.nameAsSafeName, classOrObject.nameAsSafeName,
status, status,
@@ -485,7 +490,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
) )
} else { } else {
FirClassImpl( FirClassImpl(
classOrObject, classOrObject.toFirSourceElement(),
session, session,
classOrObject.nameAsSafeName, classOrObject.nameAsSafeName,
status, status,
@@ -533,7 +538,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitObjectLiteralExpression(expression: KtObjectLiteralExpression, data: Unit): FirElement { override fun visitObjectLiteralExpression(expression: KtObjectLiteralExpression, data: Unit): FirElement {
val objectDeclaration = expression.objectDeclaration val objectDeclaration = expression.objectDeclaration
return FirAnonymousObjectImpl(expression, session).apply { return FirAnonymousObjectImpl(expression.toFirSourceElement(), session).apply {
objectDeclaration.extractAnnotationsTo(this) objectDeclaration.extractAnnotationsTo(this)
objectDeclaration.extractSuperTypeListEntriesTo(this, null) objectDeclaration.extractSuperTypeListEntriesTo(this, null)
this.typeRef = superTypeRefs.first() // TODO this.typeRef = superTypeRefs.first() // TODO
@@ -554,7 +559,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
return withChildClassName(typeAlias.nameAsSafeName) { return withChildClassName(typeAlias.nameAsSafeName) {
val firTypeAlias = FirTypeAliasImpl( val firTypeAlias = FirTypeAliasImpl(
typeAlias, typeAlias.toFirSourceElement(),
session, session,
typeAlias.nameAsSafeName, typeAlias.nameAsSafeName,
status, status,
@@ -576,7 +581,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>() val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>()
val firFunction = if (function.name == null) { val firFunction = if (function.name == null) {
FirAnonymousFunctionImpl(function, session, returnType, receiverType, FirAnonymousFunctionSymbol()) FirAnonymousFunctionImpl(function.toFirSourceElement(), session, returnType, receiverType, FirAnonymousFunctionSymbol())
} else { } else {
val status = FirDeclarationStatusImpl( val status = FirDeclarationStatusImpl(
if (function.isLocal) Visibilities.LOCAL else function.visibility, if (function.isLocal) Visibilities.LOCAL else function.visibility,
@@ -593,7 +598,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
isSuspend = function.hasModifier(SUSPEND_KEYWORD) isSuspend = function.hasModifier(SUSPEND_KEYWORD)
} }
FirSimpleFunctionImpl( FirSimpleFunctionImpl(
function, function.toFirSourceElement(),
session, session,
returnType, returnType,
receiverType, receiverType,
@@ -617,9 +622,10 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
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 = FirImplicitTypeRefImpl(literal) val literalSource = literal.toFirSourceElement()
val receiverType = FirImplicitTypeRefImpl(literal) val returnType = FirImplicitTypeRefImpl(literalSource)
return FirAnonymousFunctionImpl(literal, session, returnType, receiverType, FirAnonymousFunctionSymbol()).apply { val receiverType = FirImplicitTypeRefImpl(literalSource)
return FirAnonymousFunctionImpl(literalSource, session, returnType, receiverType, FirAnonymousFunctionSymbol()).apply {
context.firFunctions += this context.firFunctions += this
var destructuringBlock: FirExpression? = null var destructuringBlock: FirExpression? = null
for (valueParameter in literal.valueParameters) { for (valueParameter in literal.valueParameters) {
@@ -627,9 +633,9 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
valueParameters += if (multiDeclaration != null) { valueParameters += if (multiDeclaration != null) {
val name = Name.special("<destruct>") val name = Name.special("<destruct>")
val multiParameter = FirValueParameterImpl( val multiParameter = FirValueParameterImpl(
valueParameter, valueParameter.toFirSourceElement(),
this@RawFirBuilder.session, this@RawFirBuilder.session,
FirImplicitTypeRefImpl(multiDeclaration), FirImplicitTypeRefImpl(multiDeclaration.toFirSourceElement()),
name, name,
FirVariableSymbol(name), FirVariableSymbol(name),
defaultValue = null, defaultValue = null,
@@ -646,16 +652,17 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
) { toFirOrImplicitType() } ) { toFirOrImplicitType() }
multiParameter multiParameter
} else { } else {
valueParameter.toFirValueParameter(FirImplicitTypeRefImpl(psi)) valueParameter.toFirValueParameter(FirImplicitTypeRefImpl(source))
} }
} }
val expressionSource = expression.toFirSourceElement()
label = context.firLabels.pop() ?: context.firFunctionCalls.lastOrNull()?.calleeReference?.name?.let { label = context.firLabels.pop() ?: context.firFunctionCalls.lastOrNull()?.calleeReference?.name?.let {
FirLabelImpl(expression, it.asString()) FirLabelImpl(expressionSource, it.asString())
} }
val bodyExpression = literal.bodyExpression.toFirExpression("Lambda has no body") val bodyExpression = literal.bodyExpression.toFirExpression("Lambda has no body")
body = if (bodyExpression is FirBlockImpl) { body = if (bodyExpression is FirBlockImpl) {
if (bodyExpression.statements.isEmpty()) { if (bodyExpression.statements.isEmpty()) {
bodyExpression.statements.add(FirUnitExpression(expression)) bodyExpression.statements.add(FirUnitExpression(expressionSource))
} }
if (destructuringBlock is FirBlock) { if (destructuringBlock is FirBlock) {
for ((index, statement) in destructuringBlock.statements.withIndex()) { for ((index, statement) in destructuringBlock.statements.withIndex()) {
@@ -683,7 +690,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
isInner = owner.hasModifier(INNER_KEYWORD) isInner = owner.hasModifier(INNER_KEYWORD)
} }
val firConstructor = FirConstructorImpl( val firConstructor = FirConstructorImpl(
this, this.toFirSourceElement(),
session, session,
delegatedSelfTypeRef, delegatedSelfTypeRef,
null, null,
@@ -707,12 +714,13 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
hasPrimaryConstructor: Boolean hasPrimaryConstructor: Boolean
): FirDelegatedConstructorCall { ): FirDelegatedConstructorCall {
val isThis = isCallToThis || (isImplicit && hasPrimaryConstructor) val isThis = isCallToThis || (isImplicit && hasPrimaryConstructor)
val source = this.toFirSourceElement()
val delegatedType = when { val delegatedType = when {
isThis -> delegatedSelfTypeRef isThis -> delegatedSelfTypeRef
else -> delegatedSuperTypeRef ?: FirErrorTypeRefImpl(this, "No super type") else -> delegatedSuperTypeRef ?: FirErrorTypeRefImpl(source, "No super type")
} }
return FirDelegatedConstructorCallImpl( return FirDelegatedConstructorCallImpl(
this, source,
delegatedType, delegatedType,
isThis isThis
).apply { ).apply {
@@ -724,7 +732,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: Unit): FirElement { override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: Unit): FirElement {
return FirAnonymousInitializerImpl( return FirAnonymousInitializerImpl(
initializer, initializer.toFirSourceElement(),
session, session,
if (stubMode) FirEmptyExpressionBlock() else initializer.body.toFirBlock() if (stubMode) FirEmptyExpressionBlock() else initializer.body.toFirBlock()
) )
@@ -738,9 +746,10 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
{ property.initializer }.toFirExpression("Should have initializer") { property.initializer }.toFirExpression("Should have initializer")
} else null } else null
val delegateExpression by lazy { property.delegate?.expression } val delegateExpression by lazy { property.delegate?.expression }
val propertySource = property.toFirSourceElement()
val firProperty = if (property.isLocal) { val firProperty = if (property.isLocal) {
FirPropertyImpl( FirPropertyImpl(
property, propertySource,
session, session,
propertyType, propertyType,
null, null,
@@ -748,7 +757,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
initializer, initializer,
delegateExpression?.let { delegateExpression?.let {
FirWrappedDelegateExpressionImpl( FirWrappedDelegateExpressionImpl(
it, it.toFirSourceElement(),
it.toFirExpression("Incorrect delegate expression") it.toFirExpression("Incorrect delegate expression")
) )
}, },
@@ -768,7 +777,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
isLateInit = property.hasModifier(LATEINIT_KEYWORD) isLateInit = property.hasModifier(LATEINIT_KEYWORD)
} }
FirPropertyImpl( FirPropertyImpl(
property, propertySource,
session, session,
propertyType, propertyType,
property.receiverTypeReference.convertSafe(), property.receiverTypeReference.convertSafe(),
@@ -776,7 +785,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
initializer, initializer,
if (property.hasDelegate()) { if (property.hasDelegate()) {
FirWrappedDelegateExpressionImpl( FirWrappedDelegateExpressionImpl(
if (stubMode) null else delegateExpression, if (stubMode) null else delegateExpression?.toFirSourceElement(),
{ delegateExpression }.toFirExpression("Should have delegate") { delegateExpression }.toFirExpression("Should have delegate")
) )
} else null, } else null,
@@ -797,18 +806,19 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitTypeReference(typeReference: KtTypeReference, data: Unit): FirElement { override fun visitTypeReference(typeReference: KtTypeReference, data: Unit): FirElement {
val typeElement = typeReference.typeElement val typeElement = typeReference.typeElement
val source = typeReference.toFirSourceElement()
val isNullable = typeElement is KtNullableType val isNullable = typeElement is KtNullableType
fun KtTypeElement?.unwrapNullable(): KtTypeElement? = fun KtTypeElement?.unwrapNullable(): KtTypeElement? =
if (this is KtNullableType) this.innerType.unwrapNullable() else this if (this is KtNullableType) this.innerType.unwrapNullable() else this
val firType = when (val unwrappedElement = typeElement.unwrapNullable()) { val firType = when (val unwrappedElement = typeElement.unwrapNullable()) {
is KtDynamicType -> FirDynamicTypeRefImpl(typeReference, isNullable) is KtDynamicType -> FirDynamicTypeRefImpl(source, isNullable)
is KtUserType -> { is KtUserType -> {
var referenceExpression = unwrappedElement.referenceExpression var referenceExpression = unwrappedElement.referenceExpression
if (referenceExpression != null) { if (referenceExpression != null) {
val userType = FirUserTypeRefImpl( val userType = FirUserTypeRefImpl(
typeReference, isNullable source, isNullable
) )
var qualifier: KtUserType? = unwrappedElement var qualifier: KtUserType? = unwrappedElement
do { do {
@@ -826,12 +836,12 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
userType userType
} else { } else {
FirErrorTypeRefImpl(typeReference, "Incomplete user type") FirErrorTypeRefImpl(source, "Incomplete user type")
} }
} }
is KtFunctionType -> { is KtFunctionType -> {
val functionType = FirFunctionTypeRefImpl( val functionType = FirFunctionTypeRefImpl(
typeReference, source,
isNullable, isNullable,
unwrappedElement.receiverTypeReference.convertSafe(), unwrappedElement.receiverTypeReference.convertSafe(),
// TODO: probably implicit type should not be here // TODO: probably implicit type should not be here
@@ -842,7 +852,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
functionType functionType
} }
null -> FirErrorTypeRefImpl(typeReference, "Unwrapped type is null") null -> FirErrorTypeRefImpl(source, "Unwrapped type is null")
else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}") else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}")
} }
@@ -854,7 +864,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitAnnotationEntry(annotationEntry: KtAnnotationEntry, data: Unit): FirElement { override fun visitAnnotationEntry(annotationEntry: KtAnnotationEntry, data: Unit): FirElement {
val firAnnotationCall = FirAnnotationCallImpl( val firAnnotationCall = FirAnnotationCallImpl(
annotationEntry, annotationEntry.toFirSourceElement(),
annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget(), annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget(),
annotationEntry.typeReference.toFirOrErrorType() annotationEntry.typeReference.toFirOrErrorType()
) )
@@ -865,7 +875,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitTypeParameter(parameter: KtTypeParameter, data: Unit): FirElement { override fun visitTypeParameter(parameter: KtTypeParameter, data: Unit): FirElement {
val parameterName = parameter.nameAsSafeName val parameterName = parameter.nameAsSafeName
val firTypeParameter = FirTypeParameterImpl( val firTypeParameter = FirTypeParameterImpl(
parameter, parameter.toFirSourceElement(),
session, session,
parameterName, parameterName,
FirTypeParameterSymbol(), FirTypeParameterSymbol(),
@@ -890,8 +900,9 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitTypeProjection(typeProjection: KtTypeProjection, data: Unit): FirElement { override fun visitTypeProjection(typeProjection: KtTypeProjection, data: Unit): FirElement {
val projectionKind = typeProjection.projectionKind val projectionKind = typeProjection.projectionKind
val source = typeProjection.toFirSourceElement()
if (projectionKind == KtProjectionKind.STAR) { if (projectionKind == KtProjectionKind.STAR) {
return FirStarProjectionImpl(typeProjection) return FirStarProjectionImpl(source)
} }
if (projectionKind == KtProjectionKind.NONE && typeProjection.text == "_") { if (projectionKind == KtProjectionKind.NONE && typeProjection.text == "_") {
return FirTypePlaceholderProjection return FirTypePlaceholderProjection
@@ -899,7 +910,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
val typeReference = typeProjection.typeReference val typeReference = typeProjection.typeReference
val firType = typeReference.toFirOrErrorType() val firType = typeReference.toFirOrErrorType()
return FirTypeProjectionWithVarianceImpl( return FirTypeProjectionWithVarianceImpl(
typeProjection, source,
firType, firType,
when (projectionKind) { when (projectionKind) {
KtProjectionKind.IN -> Variance.IN_VARIANCE KtProjectionKind.IN -> Variance.IN_VARIANCE
@@ -914,7 +925,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
parameter.toFirValueParameter() parameter.toFirValueParameter()
override fun visitBlockExpression(expression: KtBlockExpression, data: Unit): FirElement { override fun visitBlockExpression(expression: KtBlockExpression, data: Unit): FirElement {
return FirBlockImpl(expression).apply { return FirBlockImpl(expression.toFirSourceElement()).apply {
for (statement in expression.statements) { for (statement in expression.statements) {
val firStatement = statement.toFirStatement("Statement expected: ${statement.text}") val firStatement = statement.toFirStatement("Statement expected: ${statement.text}")
if (firStatement !is FirBlock || firStatement.annotations.isNotEmpty()) { if (firStatement !is FirBlock || firStatement.annotations.isNotEmpty()) {
@@ -927,7 +938,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression, data: Unit): FirElement { override fun visitSimpleNameExpression(expression: KtSimpleNameExpression, data: Unit): FirElement {
return generateAccessExpression(expression, expression.getReferencedNameAsName()) return generateAccessExpression(expression.toFirSourceElement(), expression.getReferencedNameAsName())
} }
override fun visitConstantExpression(expression: KtConstantExpression, data: Unit): FirElement = override fun visitConstantExpression(expression: KtConstantExpression, data: Unit): FirElement =
@@ -940,29 +951,30 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
override fun visitReturnExpression(expression: KtReturnExpression, data: Unit): FirElement { override fun visitReturnExpression(expression: KtReturnExpression, data: Unit): FirElement {
val source = expression.toFirSourceElement()
val result = expression.returnedExpression?.toFirExpression("Incorrect return expression") val result = expression.returnedExpression?.toFirExpression("Incorrect return expression")
?: FirUnitExpression(expression) ?: FirUnitExpression(source)
return result.toReturn(expression, expression.getTargetLabel()?.getReferencedName()) return result.toReturn(source, expression.getTargetLabel()?.getReferencedName())
} }
override fun visitTryExpression(expression: KtTryExpression, data: Unit): FirElement { override fun visitTryExpression(expression: KtTryExpression, data: Unit): FirElement {
val tryBlock = expression.tryBlock.toFirBlock() val tryBlock = expression.tryBlock.toFirBlock()
val finallyBlock = expression.finallyBlock?.finalExpression?.toFirBlock() val finallyBlock = expression.finallyBlock?.finalExpression?.toFirBlock()
return FirTryExpressionImpl(expression, tryBlock, finallyBlock).apply { return FirTryExpressionImpl(expression.toFirSourceElement(), tryBlock, finallyBlock).apply {
for (clause in expression.catchClauses) { for (clause in expression.catchClauses) {
val parameter = clause.catchParameter?.toFirValueParameter() ?: continue val parameter = clause.catchParameter?.toFirValueParameter() ?: continue
val block = clause.catchBody.toFirBlock() val block = clause.catchBody.toFirBlock()
catches += FirCatchImpl(clause, parameter, block) catches += FirCatchImpl(clause.toFirSourceElement(), parameter, block)
} }
} }
} }
override fun visitIfExpression(expression: KtIfExpression, data: Unit): FirElement { override fun visitIfExpression(expression: KtIfExpression, data: Unit): FirElement {
return FirWhenExpressionImpl(expression, null, null).apply { return FirWhenExpressionImpl(expression.toFirSourceElement(), null, null).apply {
val condition = expression.condition val condition = expression.condition
val firCondition = condition.toFirExpression("If statement should have condition") val firCondition = condition.toFirExpression("If statement should have condition")
val trueBranch = expression.then.toFirBlock() val trueBranch = expression.then.toFirBlock()
branches += FirWhenBranchImpl(condition, firCondition, trueBranch) branches += FirWhenBranchImpl(condition?.toFirSourceElement(), firCondition, trueBranch)
expression.`else`?.let { expression.`else`?.let {
branches += FirWhenBranchImpl( branches += FirWhenBranchImpl(
null, FirElseIfTrueCondition(null), it.toFirBlock() null, FirElseIfTrueCondition(null), it.toFirBlock()
@@ -981,7 +993,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
is KtVariableDeclaration -> { is KtVariableDeclaration -> {
val name = ktSubjectExpression.nameAsSafeName val name = ktSubjectExpression.nameAsSafeName
FirPropertyImpl( FirPropertyImpl(
ktSubjectExpression, ktSubjectExpression?.toFirSourceElement(),
session, session,
ktSubjectExpression.typeReference.toFirOrImplicitType(), ktSubjectExpression.typeReference.toFirOrImplicitType(),
null, null,
@@ -999,7 +1011,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
val hasSubject = subjectExpression != null val hasSubject = subjectExpression != null
val subject = FirWhenSubject() val subject = FirWhenSubject()
return FirWhenExpressionImpl( return FirWhenExpressionImpl(
expression, expression?.toFirSourceElement(),
subjectExpression, subjectExpression,
subjectVariable subjectVariable
).apply { ).apply {
@@ -1008,24 +1020,25 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
var thereIsElseBranch = false var thereIsElseBranch = false
for (entry in expression.entries) { for (entry in expression.entries) {
val entrySource = entry.toFirSourceElement()
val branch = entry.expression.toFirBlock() val branch = entry.expression.toFirBlock()
branches += if (!entry.isElse) { branches += if (!entry.isElse) {
if (hasSubject) { if (hasSubject) {
val firCondition = entry.conditions.toFirWhenCondition( val firCondition = entry.conditions.toFirWhenCondition(
entry, entrySource,
subject, subject,
{ toFirExpression(it) }, { toFirExpression(it) },
{ toFirOrErrorType() } { toFirOrErrorType() }
) )
FirWhenBranchImpl(entry, firCondition, branch) FirWhenBranchImpl(entrySource, firCondition, branch)
} else { } else {
val condition = entry.conditions.first() as? KtWhenConditionWithExpression val condition = entry.conditions.first() as? KtWhenConditionWithExpression
val firCondition = condition?.expression.toFirExpression("No expression in condition with expression") val firCondition = condition?.expression.toFirExpression("No expression in condition with expression")
FirWhenBranchImpl(entry, firCondition, branch) FirWhenBranchImpl(entrySource, firCondition, branch)
} }
} else { } else {
thereIsElseBranch = true thereIsElseBranch = true
FirWhenBranchImpl(entry, FirElseIfTrueCondition(null), branch) FirWhenBranchImpl(entrySource, FirElseIfTrueCondition(null), branch)
} }
} }
// if (!thereIsElseBranch) { // if (!thereIsElseBranch) {
@@ -1036,52 +1049,54 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitDoWhileExpression(expression: KtDoWhileExpression, data: Unit): FirElement { override fun visitDoWhileExpression(expression: KtDoWhileExpression, data: Unit): FirElement {
return FirDoWhileLoopImpl( return FirDoWhileLoopImpl(
expression, expression.condition.toFirExpression("No condition in do-while loop") expression.toFirSourceElement(), expression.condition.toFirExpression("No condition in do-while loop")
).configure { expression.body.toFirBlock() } ).configure { expression.body.toFirBlock() }
} }
override fun visitWhileExpression(expression: KtWhileExpression, data: Unit): FirElement { override fun visitWhileExpression(expression: KtWhileExpression, data: Unit): FirElement {
return FirWhileLoopImpl( return FirWhileLoopImpl(
expression, expression.condition.toFirExpression("No condition in while loop") expression.toFirSourceElement(), expression.condition.toFirExpression("No condition in while loop")
).configure { expression.body.toFirBlock() } ).configure { expression.body.toFirBlock() }
} }
override fun visitForExpression(expression: KtForExpression, data: Unit?): FirElement { override fun visitForExpression(expression: KtForExpression, data: Unit?): FirElement {
val rangeExpression = expression.loopRange.toFirExpression("No range in for loop") val rangeExpression = expression.loopRange.toFirExpression("No range in for loop")
val parameter = expression.loopParameter val parameter = expression.loopParameter
return FirBlockImpl(expression).apply { val loopSource = expression.toFirSourceElement()
return FirBlockImpl(loopSource).apply {
val rangeSource = expression.loopRange?.toFirSourceElement()
val rangeVal = val rangeVal =
generateTemporaryVariable(this@RawFirBuilder.session, expression.loopRange, Name.special("<range>"), rangeExpression) generateTemporaryVariable(this@RawFirBuilder.session, rangeSource, Name.special("<range>"), rangeExpression)
statements += rangeVal statements += rangeVal
val iteratorVal = generateTemporaryVariable( val iteratorVal = generateTemporaryVariable(
this@RawFirBuilder.session, expression.loopRange, Name.special("<iterator>"), this@RawFirBuilder.session, rangeSource, Name.special("<iterator>"),
FirFunctionCallImpl(expression).apply { FirFunctionCallImpl(loopSource).apply {
calleeReference = FirSimpleNamedReference(expression, Name.identifier("iterator"), null) calleeReference = FirSimpleNamedReference(loopSource, Name.identifier("iterator"), null)
explicitReceiver = generateResolvedAccessExpression(expression.loopRange, rangeVal) explicitReceiver = generateResolvedAccessExpression(rangeSource, rangeVal)
} }
) )
statements += iteratorVal statements += iteratorVal
statements += FirWhileLoopImpl( statements += FirWhileLoopImpl(
expression, loopSource,
FirFunctionCallImpl(expression).apply { FirFunctionCallImpl(loopSource).apply {
calleeReference = FirSimpleNamedReference(expression, Name.identifier("hasNext"), null) calleeReference = FirSimpleNamedReference(loopSource, Name.identifier("hasNext"), null)
explicitReceiver = generateResolvedAccessExpression(expression, iteratorVal) explicitReceiver = generateResolvedAccessExpression(loopSource, iteratorVal)
} }
).configure { ).configure {
// NB: just body.toFirBlock() isn't acceptable here because we need to add some statements // NB: just body.toFirBlock() isn't acceptable here because we need to add some statements
val block = when (val body = expression.body) { val block = when (val body = expression.body) {
is KtBlockExpression -> body.accept(this@Visitor, Unit) as FirBlockImpl is KtBlockExpression -> body.accept(this@Visitor, Unit) as FirBlockImpl
null -> FirBlockImpl(body) null -> FirBlockImpl(null)
else -> FirBlockImpl(body).apply { statements += body.toFirStatement() } else -> FirBlockImpl(body.toFirSourceElement()).apply { statements += body.toFirStatement() }
} }
if (parameter != null) { if (parameter != null) {
val multiDeclaration = parameter.destructuringDeclaration val multiDeclaration = parameter.destructuringDeclaration
val firLoopParameter = generateTemporaryVariable( val firLoopParameter = generateTemporaryVariable(
this@RawFirBuilder.session, expression.loopParameter, this@RawFirBuilder.session, expression.loopParameter?.toFirSourceElement(),
if (multiDeclaration != null) Name.special("<destruct>") else parameter.nameAsSafeName, if (multiDeclaration != null) Name.special("<destruct>") else parameter.nameAsSafeName,
FirFunctionCallImpl(expression).apply { FirFunctionCallImpl(loopSource).apply {
calleeReference = FirSimpleNamedReference(expression, Name.identifier("next"), null) calleeReference = FirSimpleNamedReference(loopSource, Name.identifier("next"), null)
explicitReceiver = generateResolvedAccessExpression(expression, iteratorVal) explicitReceiver = generateResolvedAccessExpression(loopSource, iteratorVal)
} }
) )
if (multiDeclaration != null) { if (multiDeclaration != null) {
@@ -1107,22 +1122,23 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
override fun visitBreakExpression(expression: KtBreakExpression, data: Unit): FirElement { override fun visitBreakExpression(expression: KtBreakExpression, data: Unit): FirElement {
return FirBreakExpressionImpl(expression).bindLabel(expression) return FirBreakExpressionImpl(expression.toFirSourceElement()).bindLabel(expression)
} }
override fun visitContinueExpression(expression: KtContinueExpression, data: Unit): FirElement { override fun visitContinueExpression(expression: KtContinueExpression, data: Unit): FirElement {
return FirContinueExpressionImpl(expression).bindLabel(expression) return FirContinueExpressionImpl(expression.toFirSourceElement()).bindLabel(expression)
} }
override fun visitBinaryExpression(expression: KtBinaryExpression, data: Unit): FirElement { override fun visitBinaryExpression(expression: KtBinaryExpression, data: Unit): FirElement {
val operationToken = expression.operationToken val operationToken = expression.operationToken
val leftArgument = expression.left.toFirExpression("No left operand") val leftArgument = expression.left.toFirExpression("No left operand")
val rightArgument = expression.right.toFirExpression("No right operand") val rightArgument = expression.right.toFirExpression("No right operand")
val source = expression.toFirSourceElement()
when (operationToken) { when (operationToken) {
ELVIS -> ELVIS ->
return leftArgument.generateNotNullOrOther(session, rightArgument, "elvis", expression) return leftArgument.generateNotNullOrOther(session, rightArgument, "elvis", source)
ANDAND, OROR -> ANDAND, OROR ->
return leftArgument.generateLazyLogicalOperation(rightArgument, operationToken == ANDAND, expression) return leftArgument.generateLazyLogicalOperation(rightArgument, operationToken == ANDAND, source)
in OperatorConventions.IN_OPERATIONS -> in OperatorConventions.IN_OPERATIONS ->
return rightArgument.generateContainsOperation( return rightArgument.generateContainsOperation(
leftArgument, operationToken == NOT_IN, expression, expression.operationReference leftArgument, operationToken == NOT_IN, expression, expression.operationReference
@@ -1130,9 +1146,9 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
val conventionCallName = operationToken.toBinaryName() val conventionCallName = operationToken.toBinaryName()
return if (conventionCallName != null || operationToken == IDENTIFIER) { return if (conventionCallName != null || operationToken == IDENTIFIER) {
FirFunctionCallImpl(expression).apply { FirFunctionCallImpl(source).apply {
calleeReference = FirSimpleNamedReference( calleeReference = FirSimpleNamedReference(
expression.operationReference, expression.operationReference.toFirSourceElement(),
conventionCallName ?: expression.operationReference.getReferencedNameAsName(), conventionCallName ?: expression.operationReference.getReferencedNameAsName(),
null null
) )
@@ -1142,11 +1158,11 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} else { } else {
val firOperation = operationToken.toFirOperation() val firOperation = operationToken.toFirOperation()
if (firOperation in FirOperation.ASSIGNMENTS) { if (firOperation in FirOperation.ASSIGNMENTS) {
return expression.left.generateAssignment(expression, rightArgument, firOperation) { return expression.left.generateAssignment(source, rightArgument, firOperation) {
(this as KtExpression).toFirExpression("Incorrect expression in assignment: ${expression.text}") (this as KtExpression).toFirExpression("Incorrect expression in assignment: ${expression.text}")
} }
} else { } else {
FirOperatorCallImpl(expression, firOperation).apply { FirOperatorCallImpl(source, firOperation).apply {
arguments += leftArgument arguments += leftArgument
arguments += rightArgument arguments += rightArgument
} }
@@ -1157,7 +1173,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitBinaryWithTypeRHSExpression(expression: KtBinaryExpressionWithTypeRHS, data: Unit): FirElement { override fun visitBinaryWithTypeRHSExpression(expression: KtBinaryExpressionWithTypeRHS, data: Unit): FirElement {
val operation = expression.operationReference.getReferencedNameElementType().toFirOperation() val operation = expression.operationReference.getReferencedNameElementType().toFirOperation()
return FirTypeOperatorCallImpl( return FirTypeOperatorCallImpl(
expression, operation, expression.right.toFirOrErrorType() expression.toFirSourceElement(), operation, expression.right.toFirOrErrorType()
).apply { ).apply {
arguments += expression.left.toFirExpression("No left operand") arguments += expression.left.toFirExpression("No left operand")
} }
@@ -1165,7 +1181,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitIsExpression(expression: KtIsExpression, data: Unit): FirElement { override fun visitIsExpression(expression: KtIsExpression, data: Unit): FirElement {
return FirTypeOperatorCallImpl( return FirTypeOperatorCallImpl(
expression, if (expression.isNegated) FirOperation.NOT_IS else FirOperation.IS, expression.toFirSourceElement(), if (expression.isNegated) FirOperation.NOT_IS else FirOperation.IS,
expression.typeReference.toFirOrErrorType() expression.typeReference.toFirOrErrorType()
).apply { ).apply {
arguments += expression.leftHandSide.toFirExpression("No left operand") arguments += expression.leftHandSide.toFirExpression("No left operand")
@@ -1187,15 +1203,15 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
prefix = expression is KtPrefixExpression prefix = expression is KtPrefixExpression
) { (this as KtExpression).toFirExpression("Incorrect expression inside inc/dec") } ) { (this as KtExpression).toFirExpression("Incorrect expression inside inc/dec") }
} }
FirFunctionCallImpl(expression).apply { FirFunctionCallImpl(expression.toFirSourceElement()).apply {
calleeReference = FirSimpleNamedReference( calleeReference = FirSimpleNamedReference(
expression.operationReference, conventionCallName, null expression.operationReference.toFirSourceElement(), conventionCallName, null
) )
explicitReceiver = argument.toFirExpression("No operand") explicitReceiver = argument.toFirExpression("No operand")
} }
} else { } else {
val firOperation = operationToken.toFirOperation() val firOperation = operationToken.toFirOperation()
FirOperatorCallImpl(expression, firOperation).apply { FirOperatorCallImpl(expression.toFirSourceElement(), firOperation).apply {
arguments += argument.toFirExpression("No operand") arguments += argument.toFirExpression("No operand")
} }
} }
@@ -1203,18 +1219,19 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitCallExpression(expression: KtCallExpression, data: Unit): FirElement { override fun visitCallExpression(expression: KtCallExpression, data: Unit): FirElement {
val calleeExpression = expression.calleeExpression val calleeExpression = expression.calleeExpression
return FirFunctionCallImpl(expression).apply { val source = expression.toFirSourceElement()
return FirFunctionCallImpl(source).apply {
val calleeReference = when (calleeExpression) { val calleeReference = when (calleeExpression) {
is KtSimpleNameExpression -> FirSimpleNamedReference( is KtSimpleNameExpression -> FirSimpleNamedReference(
calleeExpression, calleeExpression.getReferencedNameAsName(), null calleeExpression.toFirSourceElement(), calleeExpression.getReferencedNameAsName(), null
) )
null -> FirErrorNamedReferenceImpl( null -> FirErrorNamedReferenceImpl(
calleeExpression, "Call has no callee" null, "Call has no callee"
) )
else -> { else -> {
arguments += calleeExpression.toFirExpression("Incorrect invoke receiver") arguments += calleeExpression.toFirExpression("Incorrect invoke receiver")
FirSimpleNamedReference( FirSimpleNamedReference(
expression, OperatorNameConventions.INVOKE, null source, OperatorNameConventions.INVOKE, null
) )
} }
} }
@@ -1230,8 +1247,9 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitArrayAccessExpression(expression: KtArrayAccessExpression, data: Unit): FirElement { override fun visitArrayAccessExpression(expression: KtArrayAccessExpression, data: Unit): FirElement {
val arrayExpression = expression.arrayExpression val arrayExpression = expression.arrayExpression
return FirFunctionCallImpl(expression).apply { val source = expression.toFirSourceElement()
calleeReference = FirSimpleNamedReference(expression, OperatorNameConventions.GET, null) return FirFunctionCallImpl(source).apply {
calleeReference = FirSimpleNamedReference(source, OperatorNameConventions.GET, null)
explicitReceiver = arrayExpression.toFirExpression("No array expression") explicitReceiver = arrayExpression.toFirExpression("No array expression")
for (indexExpression in expression.indexExpressions) { for (indexExpression in expression.indexExpressions) {
arguments += indexExpression.toFirExpression("Incorrect index expression") arguments += indexExpression.toFirExpression("Incorrect index expression")
@@ -1241,7 +1259,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitQualifiedExpression(expression: KtQualifiedExpression, data: Unit): FirElement { override fun visitQualifiedExpression(expression: KtQualifiedExpression, data: Unit): FirElement {
val selector = expression.selectorExpression val selector = expression.selectorExpression
?: return FirErrorExpressionImpl(expression, "Qualified expression without selector") ?: return FirErrorExpressionImpl(expression.toFirSourceElement(), "Qualified expression without selector")
val firSelector = selector.toFirExpression("Incorrect selector expression") val firSelector = selector.toFirExpression("Incorrect selector expression")
if (firSelector is FirModifiableQualifiedAccess) { if (firSelector is FirModifiableQualifiedAccess) {
firSelector.safe = expression is KtSafeQualifiedExpression firSelector.safe = expression is KtSafeQualifiedExpression
@@ -1252,27 +1270,30 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitThisExpression(expression: KtThisExpression, data: Unit): FirElement { override fun visitThisExpression(expression: KtThisExpression, data: Unit): FirElement {
val labelName = expression.getLabelName() val labelName = expression.getLabelName()
return FirThisReceiverExpressionImpl(expression, FirExplicitThisReference(expression, labelName)) val source = expression.toFirSourceElement()
return FirThisReceiverExpressionImpl(source, FirExplicitThisReference(source, labelName))
} }
override fun visitSuperExpression(expression: KtSuperExpression, data: Unit): FirElement { override fun visitSuperExpression(expression: KtSuperExpression, data: Unit): FirElement {
val superType = expression.superTypeQualifier val superType = expression.superTypeQualifier
return FirQualifiedAccessExpressionImpl(expression).apply { val source = expression.toFirSourceElement()
calleeReference = FirExplicitSuperReference(expression, superType.toFirOrImplicitType()) return FirQualifiedAccessExpressionImpl(source).apply {
calleeReference = FirExplicitSuperReference(source, superType.toFirOrImplicitType())
} }
} }
override fun visitParenthesizedExpression(expression: KtParenthesizedExpression, data: Unit): FirElement { override fun visitParenthesizedExpression(expression: KtParenthesizedExpression, data: Unit): FirElement {
return expression.expression?.accept(this, data) ?: FirErrorExpressionImpl(expression, "Empty parentheses") return expression.expression?.accept(this, data) ?: FirErrorExpressionImpl(expression.toFirSourceElement(), "Empty parentheses")
} }
override fun visitLabeledExpression(expression: KtLabeledExpression, data: Unit): FirElement { override fun visitLabeledExpression(expression: KtLabeledExpression, data: Unit): FirElement {
val source = expression.toFirSourceElement()
val labelName = expression.getLabelName() val labelName = expression.getLabelName()
val size = context.firLabels.size val size = context.firLabels.size
if (labelName != null) { if (labelName != null) {
context.firLabels += FirLabelImpl(expression, labelName) context.firLabels += FirLabelImpl(source, labelName)
} }
val result = expression.baseExpression?.accept(this, data) ?: FirErrorExpressionImpl(expression, "Empty label") val result = expression.baseExpression?.accept(this, data) ?: FirErrorExpressionImpl(source, "Empty label")
if (size != context.firLabels.size) { if (size != context.firLabels.size) {
context.firLabels.removeLast() context.firLabels.removeLast()
println("Unused label: ${expression.text}") println("Unused label: ${expression.text}")
@@ -1283,18 +1304,18 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
override fun visitAnnotatedExpression(expression: KtAnnotatedExpression, data: Unit): FirElement { override fun visitAnnotatedExpression(expression: KtAnnotatedExpression, data: Unit): FirElement {
val rawResult = expression.baseExpression?.accept(this, data) val rawResult = expression.baseExpression?.accept(this, data)
val result = rawResult as? FirAbstractAnnotatedElement val result = rawResult as? FirAbstractAnnotatedElement
?: FirErrorExpressionImpl(expression, "Strange annotated expression: ${rawResult?.render()}") ?: FirErrorExpressionImpl(expression.toFirSourceElement(), "Strange annotated expression: ${rawResult?.render()}")
expression.extractAnnotationsTo(result) expression.extractAnnotationsTo(result)
return result return result
} }
override fun visitThrowExpression(expression: KtThrowExpression, data: Unit): FirElement { override fun visitThrowExpression(expression: KtThrowExpression, data: Unit): FirElement {
return FirThrowExpressionImpl(expression, expression.thrownExpression.toFirExpression("Nothing to throw")) return FirThrowExpressionImpl(expression.toFirSourceElement(), expression.thrownExpression.toFirExpression("Nothing to throw"))
} }
override fun visitDestructuringDeclaration(multiDeclaration: KtDestructuringDeclaration, data: Unit): FirElement { override fun visitDestructuringDeclaration(multiDeclaration: KtDestructuringDeclaration, data: Unit): FirElement {
val baseVariable = generateTemporaryVariable( val baseVariable = generateTemporaryVariable(
session, multiDeclaration, "destruct", session, multiDeclaration.toFirSourceElement(), "destruct",
multiDeclaration.initializer.toFirExpression("Destructuring declaration without initializer") multiDeclaration.initializer.toFirExpression("Destructuring declaration without initializer")
) )
return generateDestructuringBlock( return generateDestructuringBlock(
@@ -1309,22 +1330,22 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
override fun visitClassLiteralExpression(expression: KtClassLiteralExpression, data: Unit): FirElement { override fun visitClassLiteralExpression(expression: KtClassLiteralExpression, data: Unit): FirElement {
return FirGetClassCallImpl(expression).apply { return FirGetClassCallImpl(expression.toFirSourceElement()).apply {
arguments += expression.receiverExpression.toFirExpression("No receiver in class literal") arguments += expression.receiverExpression.toFirExpression("No receiver in class literal")
} }
} }
override fun visitCallableReferenceExpression(expression: KtCallableReferenceExpression, data: Unit): FirElement { override fun visitCallableReferenceExpression(expression: KtCallableReferenceExpression, data: Unit): FirElement {
return FirCallableReferenceAccessImpl(expression).apply { return FirCallableReferenceAccessImpl(expression.toFirSourceElement()).apply {
calleeReference = FirSimpleNamedReference( calleeReference = FirSimpleNamedReference(
expression.callableReference, expression.callableReference.getReferencedNameAsName(), null expression.callableReference.toFirSourceElement(), expression.callableReference.getReferencedNameAsName(), null
) )
explicitReceiver = expression.receiverExpression?.toFirExpression("Incorrect receiver expression") explicitReceiver = expression.receiverExpression?.toFirExpression("Incorrect receiver expression")
} }
} }
override fun visitCollectionLiteralExpression(expression: KtCollectionLiteralExpression, data: Unit): FirElement { override fun visitCollectionLiteralExpression(expression: KtCollectionLiteralExpression, data: Unit): FirElement {
return FirArrayOfCallImpl(expression).apply { return FirArrayOfCallImpl(expression.toFirSourceElement()).apply {
for (innerExpression in expression.getInnerExpressions()) { for (innerExpression in expression.getInnerExpressions()) {
arguments += innerExpression.toFirExpression("Incorrect collection literal argument") arguments += innerExpression.toFirExpression("Incorrect collection literal argument")
} }
@@ -1332,7 +1353,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
} }
override fun visitExpression(expression: KtExpression, data: Unit): FirElement { override fun visitExpression(expression: KtExpression, data: Unit): FirElement {
return FirExpressionStub(expression) return FirExpressionStub(expression.toFirSourceElement())
} }
} }
} }
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.contracts.description.InvocationKind import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
@@ -32,12 +31,12 @@ fun FirFunctionCall.copy(
explicitReceiver: FirExpression? = this.explicitReceiver, explicitReceiver: FirExpression? = this.explicitReceiver,
dispatchReceiver: FirExpression = this.dispatchReceiver, dispatchReceiver: FirExpression = this.dispatchReceiver,
extensionReceiver: FirExpression = this.extensionReceiver, extensionReceiver: FirExpression = this.extensionReceiver,
psi: PsiElement? = this.psi, source: FirSourceElement? = this.source,
safe: Boolean = this.safe, safe: Boolean = this.safe,
typeArguments: List<FirTypeProjection> = this.typeArguments, typeArguments: List<FirTypeProjection> = this.typeArguments,
resultType: FirTypeRef = this.typeRef resultType: FirTypeRef = this.typeRef
): FirFunctionCall { ): FirFunctionCall {
return FirFunctionCallImpl(psi).apply { return FirFunctionCallImpl(source).apply {
this.safe = safe this.safe = safe
this.annotations.addAll(annotations) this.annotations.addAll(annotations)
this.arguments.addAll(arguments) this.arguments.addAll(arguments)
@@ -52,7 +51,7 @@ fun FirFunctionCall.copy(
fun FirAnonymousFunction.copy( fun FirAnonymousFunction.copy(
receiverTypeRef: FirTypeRef? = this.receiverTypeRef, receiverTypeRef: FirTypeRef? = this.receiverTypeRef,
psi: PsiElement? = this.psi, source: FirSourceElement? = this.source,
session: FirSession = this.session, session: FirSession = this.session,
returnTypeRef: FirTypeRef = this.returnTypeRef, returnTypeRef: FirTypeRef = this.returnTypeRef,
valueParameters: List<FirValueParameter> = this.valueParameters, valueParameters: List<FirValueParameter> = this.valueParameters,
@@ -63,7 +62,7 @@ fun FirAnonymousFunction.copy(
controlFlowGraphReference: FirControlFlowGraphReference = this.controlFlowGraphReference, controlFlowGraphReference: FirControlFlowGraphReference = this.controlFlowGraphReference,
invocationKind: InvocationKind? = this.invocationKind invocationKind: InvocationKind? = this.invocationKind
): FirAnonymousFunction { ): FirAnonymousFunction {
return FirAnonymousFunctionImpl(psi, session, returnTypeRef, receiverTypeRef, symbol).apply { return FirAnonymousFunctionImpl(source, session, returnTypeRef, receiverTypeRef, symbol).apply {
this.valueParameters.addAll(valueParameters) this.valueParameters.addAll(valueParameters)
this.body = body this.body = body
this.annotations.addAll(annotations) this.annotations.addAll(annotations)
@@ -78,7 +77,7 @@ fun FirAnonymousFunction.copy(
fun FirTypeRef.resolvedTypeFromPrototype( fun FirTypeRef.resolvedTypeFromPrototype(
type: ConeKotlinType type: ConeKotlinType
): FirResolvedTypeRef { ): FirResolvedTypeRef {
return FirResolvedTypeRefImpl(psi, type).apply { return FirResolvedTypeRefImpl(source, type).apply {
annotations += this@resolvedTypeFromPrototype.annotations annotations += this@resolvedTypeFromPrototype.annotations
} }
} }
@@ -88,7 +87,7 @@ fun FirTypeParameter.copy(
annotations: List<FirAnnotationCall> = this.annotations annotations: List<FirAnnotationCall> = this.annotations
): FirTypeParameterImpl { ): FirTypeParameterImpl {
return FirTypeParameterImpl( return FirTypeParameterImpl(
psi, session, name, symbol, variance, isReified source, session, name, symbol, variance, isReified
).apply { ).apply {
this.bounds += bounds this.bounds += bounds
this.annotations += annotations this.annotations += annotations
@@ -98,7 +97,7 @@ fun FirTypeParameter.copy(
fun FirWhenExpression.copy( fun FirWhenExpression.copy(
resultType: FirTypeRef = this.typeRef, resultType: FirTypeRef = this.typeRef,
calleeReference: FirReference = this.calleeReference calleeReference: FirReference = this.calleeReference
): FirWhenExpressionImpl = FirWhenExpressionImpl(psi, subject, subjectVariable).apply { ): FirWhenExpressionImpl = FirWhenExpressionImpl(source, subject, subjectVariable).apply {
this.calleeReference = calleeReference this.calleeReference = calleeReference
this@apply.branches.addAll(this@copy.branches) this@apply.branches.addAll(this@copy.branches)
this.typeRef = resultType this.typeRef = resultType
@@ -108,7 +107,7 @@ fun FirWhenExpression.copy(
fun FirTryExpression.copy( fun FirTryExpression.copy(
resultType: FirTypeRef = this.typeRef, resultType: FirTypeRef = this.typeRef,
calleeReference: FirReference = this.calleeReference calleeReference: FirReference = this.calleeReference
): FirTryExpressionImpl = FirTryExpressionImpl(psi, tryBlock, finallyBlock).apply { ): FirTryExpressionImpl = FirTryExpressionImpl(source, tryBlock, finallyBlock).apply {
this.calleeReference = calleeReference this.calleeReference = calleeReference
this@apply.catches.addAll(this@copy.catches) this@apply.catches.addAll(this@copy.catches)
this.typeRef = resultType this.typeRef = resultType
@@ -203,7 +203,7 @@ class FirCallResolver(
} }
if (referencedSymbol is FirClassLikeSymbol<*>) { if (referencedSymbol is FirClassLikeSymbol<*>) {
val classId = referencedSymbol.classId val classId = referencedSymbol.classId
return FirResolvedQualifierImpl(nameReference.psi, classId.packageFqName, classId.relativeClassName).apply { return FirResolvedQualifierImpl(nameReference.source, classId.packageFqName, classId.relativeClassName).apply {
resultType = typeForQualifier(this) resultType = typeForQualifier(this)
} }
} }
@@ -292,7 +292,7 @@ class FirCallResolver(
expectedType, expectedType,
outerConstraintSystemBuilder, outerConstraintSystemBuilder,
lhs, lhs,
FirExpressionStub(callableReferenceAccess.psi).apply { replaceTypeRef(FirResolvedTypeRefImpl(null, lhs.type)) }, FirExpressionStub(callableReferenceAccess.source).apply { replaceTypeRef(FirResolvedTypeRefImpl(null, lhs.type)) },
callableReferenceAccess.explicitReceiver callableReferenceAccess.explicitReceiver
) )
} }
@@ -353,14 +353,14 @@ class FirCallResolver(
applicability: CandidateApplicability applicability: CandidateApplicability
): FirNamedReference { ): FirNamedReference {
val name = namedReference.name val name = namedReference.name
val psi = namedReference.psi val source = namedReference.source
return when { return when {
candidates.isEmpty() -> FirErrorNamedReferenceImpl( candidates.isEmpty() -> FirErrorNamedReferenceImpl(
psi, "Unresolved name: $name" source, "Unresolved name: $name"
) )
applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> { applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> {
FirErrorNamedReferenceImpl( FirErrorNamedReferenceImpl(
psi, source,
"Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}" "Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}"
) )
} }
@@ -368,17 +368,17 @@ class FirCallResolver(
val candidate = candidates.single() val candidate = candidates.single()
val coneSymbol = candidate.symbol val coneSymbol = candidate.symbol
when { when {
coneSymbol is FirBackingFieldSymbol -> FirBackingFieldReferenceImpl(psi, null, coneSymbol) coneSymbol is FirBackingFieldSymbol -> FirBackingFieldReferenceImpl(source, null, coneSymbol)
coneSymbol is FirVariableSymbol && ( coneSymbol is FirVariableSymbol && (
coneSymbol !is FirPropertySymbol || coneSymbol !is FirPropertySymbol ||
(coneSymbol.phasedFir(session) as FirMemberDeclaration).typeParameters.isEmpty() (coneSymbol.phasedFir(session) as FirMemberDeclaration).typeParameters.isEmpty()
) -> ) ->
FirResolvedNamedReferenceImpl(psi, name, coneSymbol) FirResolvedNamedReferenceImpl(source, name, coneSymbol)
else -> FirNamedReferenceWithCandidate(psi, name, candidate) else -> FirNamedReferenceWithCandidate(source, name, candidate)
} }
} }
else -> FirErrorNamedReferenceImpl( else -> FirErrorNamedReferenceImpl(
psi, "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}" source, "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}"
) )
} }
} }
@@ -210,7 +210,7 @@ fun FirFunction<*>.constructFunctionalTypeRef(session: FirSession): FirResolvedT
val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneTypeUnsafe(), rawReturnType) val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneTypeUnsafe(), rawReturnType)
return FirResolvedTypeRefImpl(psi, functionalType) return FirResolvedTypeRefImpl(source, functionalType)
} }
fun createFunctionalType( fun createFunctionalType(
@@ -287,7 +287,7 @@ fun <T : FirResolvable> BodyResolveComponents.typeFromCallee(access: T): FirReso
return when (val newCallee = access.calleeReference) { return when (val newCallee = access.calleeReference) {
is FirErrorNamedReference -> is FirErrorNamedReference ->
FirErrorTypeRefImpl(access.psi, newCallee.errorReason) FirErrorTypeRefImpl(access.source, newCallee.errorReason)
is FirNamedReferenceWithCandidate -> { is FirNamedReferenceWithCandidate -> {
typeFromSymbol(newCallee.candidateSymbol, makeNullable) typeFromSymbol(newCallee.candidateSymbol, makeNullable)
} }
@@ -114,7 +114,7 @@ class FirSamResolverImpl(
val newTypeParameters = firRegularClass.typeParameters.map { typeParameter -> val newTypeParameters = firRegularClass.typeParameters.map { typeParameter ->
FirTypeParameterImpl( FirTypeParameterImpl(
typeParameter.psi, typeParameter.source,
firSession, firSession,
typeParameter.name, typeParameter.name,
FirTypeParameterSymbol(), FirTypeParameterSymbol(),
@@ -137,7 +137,7 @@ class FirSamResolverImpl(
for ((newTypeParameter, oldTypeParameter) in newTypeParameters.zip(firRegularClass.typeParameters)) { for ((newTypeParameter, oldTypeParameter) in newTypeParameters.zip(firRegularClass.typeParameters)) {
newTypeParameter.bounds += oldTypeParameter.bounds.mapNotNull { typeRef -> newTypeParameter.bounds += oldTypeParameter.bounds.mapNotNull { typeRef ->
FirResolvedTypeRefImpl(typeRef.psi, substitutor.substituteOrSelf(typeRef.coneTypeSafe() ?: return@mapNotNull null)) FirResolvedTypeRefImpl(typeRef.source, substitutor.substituteOrSelf(typeRef.coneTypeSafe() ?: return@mapNotNull null))
} }
} }
@@ -170,9 +170,9 @@ class FirSamResolverImpl(
).apply { ).apply {
valueParameters += listOf( valueParameters += listOf(
FirValueParameterImpl( FirValueParameterImpl(
psi, source,
session, session,
FirResolvedTypeRefImpl(firRegularClass.psi, substitutedFunctionType), FirResolvedTypeRefImpl(firRegularClass.source, substitutedFunctionType),
SAM_PARAMETER_NAME, SAM_PARAMETER_NAME,
FirVariableSymbol(SAM_PARAMETER_NAME), FirVariableSymbol(SAM_PARAMETER_NAME),
defaultValue = null, defaultValue = null,
@@ -5,16 +5,16 @@
package org.jetbrains.kotlin.fir.resolve.calls package org.jetbrains.kotlin.fir.resolve.calls
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class FirNamedReferenceWithCandidate( class FirNamedReferenceWithCandidate(
psi: PsiElement?, source: FirSourceElement?,
name: Name, name: Name,
val candidate: Candidate val candidate: Candidate
) : FirSimpleNamedReference(psi, name, candidate.symbol) { ) : FirSimpleNamedReference(source, name, candidate.symbol) {
override val candidateSymbol: AbstractFirBasedSymbol<*> override val candidateSymbol: AbstractFirBasedSymbol<*>
get() = candidate.symbol get() = candidate.symbol
} }
@@ -83,10 +83,10 @@ class PostponedArgumentsAnalyzer(
val namedReference = when { val namedReference = when {
candidate == null || applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> candidate == null || applicability < CandidateApplicability.SYNTHETIC_RESOLVED ->
FirErrorNamedReferenceImpl( FirErrorNamedReferenceImpl(
callableReferenceAccess.psi, callableReferenceAccess.source,
"Unresolved reference: ${callableReferenceAccess.calleeReference.name}" "Unresolved reference: ${callableReferenceAccess.calleeReference.name}"
) )
else -> FirNamedReferenceWithCandidate(callableReferenceAccess.psi, callableReferenceAccess.calleeReference.name, candidate) else -> FirNamedReferenceWithCandidate(callableReferenceAccess.source, callableReferenceAccess.calleeReference.name, candidate)
} }
val transformedCalleeReference = callableReferenceAccess.transformCalleeReference( val transformedCalleeReference = callableReferenceAccess.transformCalleeReference(
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.fir.resolve.dfa package org.jetbrains.kotlin.fir.resolve.dfa
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
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
class FirControlFlowGraphReferenceImpl(val controlFlowGraph: ControlFlowGraph) : FirControlFlowGraphReference() { class FirControlFlowGraphReferenceImpl(val controlFlowGraph: ControlFlowGraph) : FirControlFlowGraphReference() {
override val psi: PsiElement? get() = null override val source: FirSourceElement? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.resolve.dfa.cfg package org.jetbrains.kotlin.fir.resolve.dfa.cfg
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
@@ -167,7 +167,7 @@ class AnnotationExitNode(owner: ControlFlowGraph, override val fir: FirAnnotatio
// ----------------------------------- Stub ----------------------------------- // ----------------------------------- Stub -----------------------------------
object FirStub : FirElement { object FirStub : FirElement {
override val psi: PsiElement? get() = null override val source: FirSourceElement? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
import org.jetbrains.kotlin.fir.expressions.FirLoop import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.DFS
@@ -53,7 +53,7 @@ class FirCallCompletionResultsWriterTransformer(
return qualifiedAccessExpression.transformCalleeReference( return qualifiedAccessExpression.transformCalleeReference(
StoreCalleeReference, StoreCalleeReference,
FirResolvedNamedReferenceImpl( FirResolvedNamedReferenceImpl(
calleeReference.psi, calleeReference.source,
calleeReference.name, calleeReference.name,
calleeReference.candidateSymbol calleeReference.candidateSymbol
) )
@@ -79,7 +79,7 @@ class FirCallCompletionResultsWriterTransformer(
return callableReferenceAccess.transformCalleeReference( return callableReferenceAccess.transformCalleeReference(
StoreCalleeReference, StoreCalleeReference,
FirResolvedCallableReferenceImpl( FirResolvedCallableReferenceImpl(
calleeReference.psi, calleeReference.source,
calleeReference.name, calleeReference.name,
calleeReference.candidateSymbol calleeReference.candidateSymbol
).apply { ).apply {
@@ -97,7 +97,7 @@ class FirCallCompletionResultsWriterTransformer(
return variableAssignment.transformCalleeReference( return variableAssignment.transformCalleeReference(
StoreCalleeReference, StoreCalleeReference,
FirResolvedNamedReferenceImpl( FirResolvedNamedReferenceImpl(
calleeReference.psi, calleeReference.source,
calleeReference.name, calleeReference.name,
calleeReference.candidateSymbol calleeReference.candidateSymbol
) )
@@ -116,14 +116,14 @@ class FirCallCompletionResultsWriterTransformer(
is FirTypeProjectionWithVariance -> { is FirTypeProjectionWithVariance -> {
val typeRef = argument.typeRef as FirResolvedTypeRef val typeRef = argument.typeRef as FirResolvedTypeRef
FirTypeProjectionWithVarianceImpl( FirTypeProjectionWithVarianceImpl(
argument.psi, argument.source,
typeRef.withReplacedConeType(type), typeRef.withReplacedConeType(type),
argument.variance argument.variance
) )
} }
else -> { else -> {
FirTypeProjectionWithVarianceImpl( FirTypeProjectionWithVarianceImpl(
argument?.psi, argument?.source,
FirResolvedTypeRefImpl(null, type), FirResolvedTypeRefImpl(null, type),
Variance.INVARIANT Variance.INVARIANT
) )
@@ -149,7 +149,7 @@ class FirCallCompletionResultsWriterTransformer(
resultType = resultType, resultType = resultType,
typeArguments = typeArguments, typeArguments = typeArguments,
calleeReference = FirResolvedNamedReferenceImpl( calleeReference = FirResolvedNamedReferenceImpl(
calleeReference.psi, calleeReference.source,
calleeReference.name, calleeReference.name,
calleeReference.candidateSymbol calleeReference.candidateSymbol
), ),
@@ -215,7 +215,7 @@ class FirCallCompletionResultsWriterTransformer(
return whenExpression.copy( return whenExpression.copy(
resultType = resultType, resultType = resultType,
calleeReference = FirResolvedNamedReferenceImpl( calleeReference = FirResolvedNamedReferenceImpl(
calleeReference.psi, calleeReference.source,
calleeReference.name, calleeReference.name,
calleeReference.candidateSymbol calleeReference.candidateSymbol
) )
@@ -241,7 +241,7 @@ class FirCallCompletionResultsWriterTransformer(
return tryExpression.copy( return tryExpression.copy(
resultType = resultType, resultType = resultType,
calleeReference = FirResolvedNamedReferenceImpl( calleeReference = FirResolvedNamedReferenceImpl(
calleeReference.psi, calleeReference.source,
calleeReference.name, calleeReference.name,
calleeReference.candidateSymbol calleeReference.candidateSymbol
) )
@@ -29,7 +29,7 @@ class FirSpecificTypeResolverTransformer(
val typeResolver = FirTypeResolver.getInstance(session) val typeResolver = FirTypeResolver.getInstance(session)
functionTypeRef.transformChildren(this, data) functionTypeRef.transformChildren(this, data)
return FirResolvedFunctionTypeRefImpl( return FirResolvedFunctionTypeRefImpl(
functionTypeRef.psi, functionTypeRef.source,
typeResolver.resolveType(functionTypeRef, towerScope), typeResolver.resolveType(functionTypeRef, towerScope),
functionTypeRef.isMarkedNullable, functionTypeRef.isMarkedNullable,
functionTypeRef.receiverTypeRef, functionTypeRef.receiverTypeRef,
@@ -42,7 +42,7 @@ class FirSpecificTypeResolverTransformer(
private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> { private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> {
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
typeRef.psi, typeRef.source,
resolvedType resolvedType
).apply { ).apply {
annotations += typeRef.annotations annotations += typeRef.annotations
@@ -9,7 +9,9 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.scopes.addImportingScopes import org.jetbrains.kotlin.fir.scopes.addImportingScopes
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl
@@ -162,7 +164,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe
val coneType = (superTypeRef as FirResolvedTypeRef).type val coneType = (superTypeRef as FirResolvedTypeRef).type
if (coneType is ConeTypeParameterType) { if (coneType is ConeTypeParameterType) {
resultingTypeRefs.add( resultingTypeRefs.add(
FirErrorTypeRefImpl(superTypeRef.psi, "Type parameter cannot be a super-type: ${coneType.render()}") FirErrorTypeRefImpl(superTypeRef.source, "Type parameter cannot be a super-type: ${coneType.render()}")
) )
continue continue
} }
@@ -171,7 +173,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe
if (superTypeClassId.outerClasses().any { it.areSupertypesComputing() }) { if (superTypeClassId.outerClasses().any { it.areSupertypesComputing() }) {
resultingTypeRefs.add( resultingTypeRefs.add(
FirErrorTypeRefImpl(superTypeRef.psi, "Recursion detected: ${superTypeRef.render()}") FirErrorTypeRefImpl(superTypeRef.source, "Recursion detected: ${superTypeRef.render()}")
) )
continue continue
@@ -164,7 +164,7 @@ class FirSyntheticCallGenerator(
} }
return FirSimpleFunctionImpl( return FirSimpleFunctionImpl(
session = session, session = session,
psi = null, source = null,
symbol = symbol, symbol = symbol,
name = name, name = name,
status = status, status = status,
@@ -179,7 +179,7 @@ class FirSyntheticCallGenerator(
val name = Name.identifier(name) val name = Name.identifier(name)
return FirValueParameterImpl( return FirValueParameterImpl(
session = session, session = session,
psi = null, source = null,
name = name, name = name,
returnTypeRef = this, returnTypeRef = this,
defaultValue = null, defaultValue = null,
@@ -326,7 +326,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
val bodyExpectedType = returnTypeRefFromResolvedAtom ?: data val bodyExpectedType = returnTypeRefFromResolvedAtom ?: data
af = transformFunction(af, bodyExpectedType).single as FirAnonymousFunction af = transformFunction(af, bodyExpectedType).single as FirAnonymousFunction
af = af.copy( af = af.copy(
returnTypeRef = af.body?.resultType ?: FirErrorTypeRefImpl(af.psi, "No result type for lambda") returnTypeRef = af.body?.resultType ?: FirErrorTypeRefImpl(af.source, "No result type for lambda")
) )
af.replaceTypeRef(af.constructFunctionalTypeRef(session)) af.replaceTypeRef(af.constructFunctionalTypeRef(session))
af.compose() af.compose()
@@ -5,7 +5,8 @@
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.BuiltinTypes
import org.jetbrains.kotlin.fir.FirCallResolver
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirErrorExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirErrorExpressionImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastImpl import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastImpl
@@ -53,7 +54,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
override fun transformExpression(expression: FirExpression, data: Any?): CompositeTransformResult<FirStatement> { override fun transformExpression(expression: FirExpression, data: Any?): CompositeTransformResult<FirStatement> {
if (expression.resultType is FirImplicitTypeRef && expression !is FirWrappedExpression) { if (expression.resultType is FirImplicitTypeRef && expression !is FirWrappedExpression) {
val type = FirErrorTypeRefImpl(expression.psi, "Type calculating for ${expression::class} is not supported") val type = FirErrorTypeRefImpl(expression.source, "Type calculating for ${expression::class} is not supported")
expression.resultType = type expression.resultType = type
} }
return (expression.transformChildren(transformer, data) as FirStatement).compose() return (expression.transformChildren(transformer, data) as FirStatement).compose()
@@ -81,7 +82,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
} else { } else {
val superTypeRef = implicitReceiverStack.lastDispatchReceiver() val superTypeRef = implicitReceiverStack.lastDispatchReceiver()
?.boundSymbol?.phasedFir?.superTypeRefs?.firstOrNull() ?.boundSymbol?.phasedFir?.superTypeRefs?.firstOrNull()
?: FirErrorTypeRefImpl(qualifiedAccessExpression.psi, "No super type") ?: FirErrorTypeRefImpl(qualifiedAccessExpression.source, "No super type")
qualifiedAccessExpression.resultType = superTypeRef qualifiedAccessExpression.resultType = superTypeRef
callee.replaceSuperTypeRef(superTypeRef) callee.replaceSuperTypeRef(superTypeRef)
} }
@@ -123,7 +124,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
} }
val intersectedType = ConeTypeIntersector.intersectTypes(inferenceComponents.ctx as ConeInferenceContext, allTypes) val intersectedType = ConeTypeIntersector.intersectTypes(inferenceComponents.ctx as ConeInferenceContext, allTypes)
// TODO: add check that intersectedType is not equal to original type // TODO: add check that intersectedType is not equal to original type
val intersectedTypeRef = FirResolvedTypeRefImpl(qualifiedAccessExpression.resultType.psi, intersectedType).apply { val intersectedTypeRef = FirResolvedTypeRefImpl(qualifiedAccessExpression.resultType.source, intersectedType).apply {
annotations += qualifiedAccessExpression.resultType.annotations annotations += qualifiedAccessExpression.resultType.annotations
} }
return FirExpressionWithSmartcastImpl(qualifiedAccessExpression, intersectedTypeRef, typesFromSmartCast) return FirExpressionWithSmartcastImpl(qualifiedAccessExpression, intersectedTypeRef, typesFromSmartCast)
@@ -167,7 +168,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
else -> null else -> null
} }
block.resultType = if (resultExpression == null) { block.resultType = if (resultExpression == null) {
FirImplicitUnitTypeRef(block.psi) FirImplicitUnitTypeRef(block.source)
} else { } else {
(resultExpression.resultType as? FirResolvedTypeRef) ?: FirErrorTypeRefImpl(null, "No type for block") (resultExpression.resultType as? FirResolvedTypeRef) ?: FirErrorTypeRefImpl(null, "No type for block")
} }
@@ -197,11 +198,11 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
val operatorCall = operatorCall.transformArguments(this, noExpectedType) val operatorCall = operatorCall.transformArguments(this, noExpectedType)
val (leftArgument, rightArgument) = operatorCall.arguments val (leftArgument, rightArgument) = operatorCall.arguments
fun createFunctionCall(name: Name) = FirFunctionCallImpl(operatorCall.psi).apply { fun createFunctionCall(name: Name) = FirFunctionCallImpl(operatorCall.source).apply {
explicitReceiver = leftArgument explicitReceiver = leftArgument
arguments += rightArgument arguments += rightArgument
calleeReference = FirSimpleNamedReference( calleeReference = FirSimpleNamedReference(
operatorCall.psi, operatorCall.source,
name, name,
candidateSymbol = null candidateSymbol = null
) )
@@ -224,14 +225,14 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
operatorCallReference == null || property?.isVal == true -> resolvedAssignCall.compose() operatorCallReference == null || property?.isVal == true -> resolvedAssignCall.compose()
assignCallReference == null -> { assignCallReference == null -> {
val assignment = val assignment =
FirVariableAssignmentImpl(operatorCall.psi, false, resolvedOperatorCall, FirOperation.ASSIGN).apply { FirVariableAssignmentImpl(operatorCall.source, false, resolvedOperatorCall, FirOperation.ASSIGN).apply {
lValue = (leftArgument as? FirQualifiedAccess)?.calleeReference lValue = (leftArgument as? FirQualifiedAccess)?.calleeReference
?: FirErrorNamedReferenceImpl(null, "Unresolved reference") ?: FirErrorNamedReferenceImpl(null, "Unresolved reference")
} }
assignment.transform(transformer, noExpectedType) assignment.transform(transformer, noExpectedType)
} }
else -> FirErrorExpressionImpl( else -> FirErrorExpressionImpl(
operatorCall.psi, operatorCall.source,
"Operator overload ambiguity. $assignmentOperatorName and $simpleOperatorName are compatible" "Operator overload ambiguity. $assignmentOperatorName and $simpleOperatorName are compatible"
).compose() ).compose()
} }
@@ -6,9 +6,11 @@
package org.jetbrains.kotlin.fir.scopes.impl package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump
@@ -116,7 +118,7 @@ class FirClassSubstitutionScope(
// TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl // TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl
// As second alternative, we can invent some light-weight kind of FirRegularClass // As second alternative, we can invent some light-weight kind of FirRegularClass
FirSimpleFunctionImpl( FirSimpleFunctionImpl(
psi, source,
session, session,
baseFunction.returnTypeRef.withReplacedConeType(newReturnType), baseFunction.returnTypeRef.withReplacedConeType(newReturnType),
baseFunction.receiverTypeRef?.withReplacedConeType(newReceiverType), baseFunction.receiverTypeRef?.withReplacedConeType(newReceiverType),
@@ -130,7 +132,7 @@ class FirClassSubstitutionScope(
) { valueParameter, newType -> ) { valueParameter, newType ->
with(valueParameter) { with(valueParameter) {
FirValueParameterImpl( FirValueParameterImpl(
psi, source,
session, session,
this.returnTypeRef.withReplacedConeType(newType), this.returnTypeRef.withReplacedConeType(newType),
name, name,
@@ -157,7 +159,7 @@ class FirClassSubstitutionScope(
val symbol = FirPropertySymbol(baseSymbol.callableId, true, baseSymbol) val symbol = FirPropertySymbol(baseSymbol.callableId, true, baseSymbol)
with(baseProperty) { with(baseProperty) {
FirPropertyImpl( FirPropertyImpl(
psi, source,
session, session,
baseProperty.returnTypeRef.withReplacedConeType(newReturnType), baseProperty.returnTypeRef.withReplacedConeType(newReturnType),
baseProperty.receiverTypeRef?.withReplacedConeType(newReceiverType), baseProperty.receiverTypeRef?.withReplacedConeType(newReceiverType),
@@ -182,7 +184,7 @@ fun FirTypeRef.withReplacedConeType(newType: ConeKotlinType?): FirResolvedTypeRe
require(this is FirResolvedTypeRef) require(this is FirResolvedTypeRef)
if (newType == null) return this if (newType == null) return this
return FirResolvedTypeRefImpl(psi, newType).apply { return FirResolvedTypeRefImpl(source, newType).apply {
annotations += this@withReplacedConeType.annotations annotations += this@withReplacedConeType.annotations
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -15,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirAnnotationContainer : FirElement { interface FirAnnotationContainer : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
val annotations: List<FirAnnotationCall> val annotations: List<FirAnnotationCall>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnnotationContainer(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnnotationContainer(this, data)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -15,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirControlFlowGraphOwner : FirElement { interface FirControlFlowGraphOwner : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
val controlFlowGraphReference: FirControlFlowGraphReference val controlFlowGraphReference: FirControlFlowGraphReference
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitControlFlowGraphOwner(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitControlFlowGraphOwner(this, data)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -15,7 +14,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirElement { interface FirElement {
val psi: PsiElement? val source: FirSourceElement?
fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitElement(this, data) fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitElement(this, data)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -14,7 +13,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirLabel : FirPureAbstractElement(), FirElement { abstract class FirLabel : FirPureAbstractElement(), FirElement {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract val name: String abstract val name: String
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitLabel(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitLabel(this, data)
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
abstract class FirSourceElement
class FirPsiSourceElement(val psi: PsiElement) : FirSourceElement()
val FirSourceElement?.psi: PsiElement? get() = (this as? FirPsiSourceElement)?.psi
val FirElement.psi: PsiElement? get() = (source as? FirPsiSourceElement)?.psi
@Suppress("NOTHING_TO_INLINE")
inline fun PsiElement.toFirSourceElement(): FirPsiSourceElement = FirPsiSourceElement(this)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -16,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirSymbolOwner<E> : FirElement where E : FirSymbolOwner<E>, E : FirDeclaration { interface FirSymbolOwner<E> : FirElement where E : FirSymbolOwner<E>, E : FirDeclaration {
override val psi: PsiElement? override val source: FirSourceElement?
val symbol: AbstractFirBasedSymbol<E> val symbol: AbstractFirBasedSymbol<E>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSymbolOwner(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSymbolOwner(this, data)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -14,7 +13,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirTargetElement : FirElement { interface FirTargetElement : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTargetElement(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTargetElement(this, data)
} }
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.contracts package org.jetbrains.kotlin.fir.contracts
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirContractDescription : FirPureAbstractElement(), FirElement { abstract class FirContractDescription : FirPureAbstractElement(), FirElement {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract val effects: List<ConeEffectDeclaration> abstract val effects: List<ConeEffectDeclaration>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitContractDescription(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitContractDescription(this, data)
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.contracts.impl package org.jetbrains.kotlin.fir.contracts.impl
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirContractDescriptionImpl( class FirContractDescriptionImpl(
override val psi: PsiElement? override val source: FirSourceElement?
) : FirContractDescription() { ) : FirContractDescription() {
override val effects: MutableList<ConeEffectDeclaration> = mutableListOf() override val effects: MutableList<ConeEffectDeclaration> = mutableListOf()
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.fir.contracts.impl package org.jetbrains.kotlin.fir.contracts.impl
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
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
object FirEmptyContractDescription : FirContractDescription() { object FirEmptyContractDescription : FirContractDescription() {
override val psi: PsiElement? get() = null override val source: FirSourceElement? get() = null
override val effects: List<ConeEffectDeclaration> get() = emptyList() override val effects: List<ConeEffectDeclaration> get() = emptyList()
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.contracts.description.InvocationKind import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.FirLabel import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall 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.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirAnonymousFunction : FirPureAbstractElement(), FirFunction<FirAnonymousFunction>, FirExpression { abstract class FirAnonymousFunction : FirPureAbstractElement(), FirFunction<FirAnonymousFunction>, FirExpression {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration { abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract val body: FirBlock? abstract val body: FirBlock?
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirAnonymousObject : FirPureAbstractElement(), FirClass, FirExpression { abstract class FirAnonymousObject : FirPureAbstractElement(), FirClass, FirExpression {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val classKind: ClassKind abstract override val classKind: ClassKind
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirCallableDeclaration<F : FirCallableDeclaration<F>> : FirTypedDeclaration, FirSymbolOwner<F> { interface FirCallableDeclaration<F : FirCallableDeclaration<F>> : FirTypedDeclaration, FirSymbolOwner<F> {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> : FirCallableDeclaration<F>, FirMemberDeclaration { interface FirCallableMemberDeclaration<F : FirCallableMemberDeclaration<F>> : FirCallableDeclaration<F>, FirMemberDeclaration {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirClass : FirDeclaration, FirStatement, FirAnnotationContainer { interface FirClass : FirDeclaration, FirStatement, FirAnnotationContainer {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
val classKind: ClassKind val classKind: ClassKind
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirStatement, FirMemberDeclaration, FirSymbolOwner<F>, FirTypeParametersOwner { interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirStatement, FirMemberDeclaration, FirSymbolOwner<F>, FirTypeParametersOwner {
override val psi: PsiElement? override val source: FirSourceElement?
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall 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.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirConstructor : FirMemberFunction<FirConstructor> { interface FirConstructor : FirMemberFunction<FirConstructor> {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val returnTypeRef: FirTypeRef override val returnTypeRef: FirTypeRef
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirContractDescriptionOwner : FirElement { interface FirContractDescriptionOwner : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
val contractDescription: FirContractDescription val contractDescription: FirContractDescription
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitContractDescriptionOwner(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitContractDescriptionOwner(this, data)
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
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.FirSourceElement
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirDeclaration : FirElement { interface FirDeclaration : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
val session: FirSession val session: FirSession
val resolvePhase: FirResolvePhase val resolvePhase: FirResolvePhase
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirDeclarationStatus : FirElement { interface FirDeclarationStatus : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
val visibility: Visibility val visibility: Visibility
val modality: Modality? val modality: Modality?
val isExpect: Boolean val isExpect: Boolean
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirEnumEntry : FirPureAbstractElement(), FirRegularClass { abstract class FirEnumEntry : FirPureAbstractElement(), FirRegularClass {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val name: Name abstract override val name: Name
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall 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.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirErrorFunction : FirPureAbstractElement(), FirFunction<FirErrorFunction> { abstract class FirErrorFunction : FirPureAbstractElement(), FirFunction<FirErrorFunction> {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirField : FirPureAbstractElement(), FirVariable<FirField>, FirCallableMemberDeclaration<FirField> { abstract class FirField : FirPureAbstractElement(), FirVariable<FirField>, FirCallableMemberDeclaration<FirField> {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val returnTypeRef: FirTypeRef abstract override val returnTypeRef: FirTypeRef
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirFile : FirPureAbstractElement(), FirAnnotationContainer, FirDeclaration { abstract class FirFile : FirPureAbstractElement(), FirAnnotationContainer, FirDeclaration {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.FirTargetElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirControlFlowGraphOwner, FirTargetElement, FirAnnotationContainer, FirTypeParametersOwner, FirStatement { interface FirFunction<F : FirFunction<F>> : FirCallableDeclaration<F>, FirControlFlowGraphOwner, FirTargetElement, FirAnnotationContainer, FirTypeParametersOwner, FirStatement {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirImport : FirPureAbstractElement(), FirElement { abstract class FirImport : FirPureAbstractElement(), FirElement {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract val importedFqName: FqName? abstract val importedFqName: FqName?
abstract val isAllUnder: Boolean abstract val isAllUnder: Boolean
abstract val aliasName: Name? abstract val aliasName: Name?
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirMemberDeclaration : FirNamedDeclaration, FirAnnotationContainer { interface FirMemberDeclaration : FirNamedDeclaration, FirAnnotationContainer {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val name: Name override val name: Name
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall 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.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirMemberFunction<F : FirMemberFunction<F>> : FirFunction<F>, FirCallableMemberDeclaration<F> { interface FirMemberFunction<F : FirMemberFunction<F>> : FirFunction<F>, FirCallableMemberDeclaration<F> {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val returnTypeRef: FirTypeRef override val returnTypeRef: FirTypeRef
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirNamedDeclaration : FirDeclaration { interface FirNamedDeclaration : FirDeclaration {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
val name: Name val name: Name
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirProperty : FirPureAbstractElement(), FirVariable<FirProperty>, FirControlFlowGraphOwner, FirTypeParametersOwner, FirCallableMemberDeclaration<FirProperty> { abstract class FirProperty : FirPureAbstractElement(), FirVariable<FirProperty>, FirControlFlowGraphOwner, FirTypeParametersOwner, FirCallableMemberDeclaration<FirProperty> {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val returnTypeRef: FirTypeRef abstract override val returnTypeRef: FirTypeRef
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPropertyAccessor>, FirContractDescriptionOwner { abstract class FirPropertyAccessor : FirPureAbstractElement(), FirFunction<FirPropertyAccessor>, FirContractDescriptionOwner {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val returnTypeRef: FirTypeRef abstract override val returnTypeRef: FirTypeRef
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirRegularClass : FirNamedDeclaration, FirClassLikeDeclaration<FirRegularClass>, FirClass { interface FirRegularClass : FirNamedDeclaration, FirClassLikeDeclaration<FirRegularClass>, FirClass {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val name: Name override val name: Name
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirResolvedDeclarationStatus : FirDeclarationStatus { interface FirResolvedDeclarationStatus : FirDeclarationStatus {
override val psi: PsiElement? override val source: FirSourceElement?
override val visibility: Visibility override val visibility: Visibility
override val modality: Modality? override val modality: Modality?
override val isExpect: Boolean override val isExpect: Boolean
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirResolvedImport : FirImport() { abstract class FirResolvedImport : FirImport() {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val importedFqName: FqName? abstract override val importedFqName: FqName?
abstract override val isAllUnder: Boolean abstract override val isAllUnder: Boolean
abstract override val aliasName: Name? abstract override val aliasName: Name?
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirSealedClass : FirPureAbstractElement(), FirRegularClass { abstract class FirSealedClass : FirPureAbstractElement(), FirRegularClass {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val name: Name abstract override val name: Name
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirSimpleFunction : FirPureAbstractElement(), FirMemberFunction<FirSimpleFunction>, FirContractDescriptionOwner { abstract class FirSimpleFunction : FirPureAbstractElement(), FirMemberFunction<FirSimpleFunction>, FirContractDescriptionOwner {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val returnTypeRef: FirTypeRef abstract override val returnTypeRef: FirTypeRef
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirTypeAlias : FirPureAbstractElement(), FirClassLikeDeclaration<FirTypeAlias> { abstract class FirTypeAlias : FirPureAbstractElement(), FirClassLikeDeclaration<FirTypeAlias> {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val name: Name abstract override val name: Name
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirTypeParameter : FirPureAbstractElement(), FirNamedDeclaration, FirSymbolOwner<FirTypeParameter>, FirAnnotationContainer { abstract class FirTypeParameter : FirPureAbstractElement(), FirNamedDeclaration, FirSymbolOwner<FirTypeParameter>, FirAnnotationContainer {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val name: Name abstract override val name: Name
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirTypeParametersOwner : FirElement { interface FirTypeParametersOwner : FirElement {
override val psi: PsiElement? override val source: FirSourceElement?
val typeParameters: List<FirTypeParameter> val typeParameters: List<FirTypeParameter>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTypeParametersOwner(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTypeParametersOwner(this, data)
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer { interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirValueParameter : FirPureAbstractElement(), FirVariable<FirValueParameter> { abstract class FirValueParameter : FirPureAbstractElement(), FirVariable<FirValueParameter> {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override val resolvePhase: FirResolvePhase abstract override val resolvePhase: FirResolvePhase
abstract override val returnTypeRef: FirTypeRef abstract override val returnTypeRef: FirTypeRef
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirVariable<F : FirVariable<F>> : FirCallableDeclaration<F>, FirNamedDeclaration, FirStatement { interface FirVariable<F : FirVariable<F>> : FirCallableDeclaration<F>, FirNamedDeclaration, FirStatement {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override val resolvePhase: FirResolvePhase override val resolvePhase: FirResolvePhase
override val returnTypeRef: FirTypeRef override val returnTypeRef: FirTypeRef
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.contracts.description.InvocationKind import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.FirLabel import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirAnonymousFunctionImpl( class FirAnonymousFunctionImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override var returnTypeRef: FirTypeRef, override var returnTypeRef: FirTypeRef,
override var receiverTypeRef: FirTypeRef?, override var receiverTypeRef: FirTypeRef?,
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirAnonymousInitializerImpl( class FirAnonymousInitializerImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override var body: FirBlock? override var body: FirBlock?
) : FirAnonymousInitializer() { ) : FirAnonymousInitializer() {
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirAnonymousObjectImpl( class FirAnonymousObjectImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession override val session: FirSession
) : FirAnonymousObject(), FirModifiableClass, FirAbstractAnnotatedElement { ) : FirAnonymousObject(), FirModifiableClass, FirAbstractAnnotatedElement {
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirClassImpl( class FirClassImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val name: Name, override val name: Name,
override var status: FirDeclarationStatus, override var status: FirDeclarationStatus,
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
open class FirConstructorImpl( open class FirConstructorImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override var returnTypeRef: FirTypeRef, override var returnTypeRef: FirTypeRef,
override var receiverTypeRef: FirTypeRef?, override var receiverTypeRef: FirTypeRef?,
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl.Modifier.* import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl.Modifier.*
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -18,7 +18,7 @@ open class FirDeclarationStatusImpl(
override val visibility: Visibility, override val visibility: Visibility,
override val modality: Modality? override val modality: Modality?
) : FirPureAbstractElement(), FirDeclarationStatus { ) : FirPureAbstractElement(), FirDeclarationStatus {
override val psi: PsiElement? get() = null override val source: FirSourceElement? get() = null
protected var flags: Int = 0 protected var flags: Int = 0
private operator fun get(modifier: Modifier): Boolean = (flags and modifier.mask) != 0 private operator fun get(modifier: Modifier): Boolean = (flags and modifier.mask) != 0
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -21,13 +21,13 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
abstract class FirDefaultPropertyAccessor( abstract class FirDefaultPropertyAccessor(
psi: PsiElement?, source: FirSourceElement?,
session: FirSession, session: FirSession,
propertyTypeRef: FirTypeRef, propertyTypeRef: FirTypeRef,
isGetter: Boolean, isGetter: Boolean,
visibility: Visibility, visibility: Visibility,
symbol: FirPropertyAccessorSymbol symbol: FirPropertyAccessorSymbol
) : FirPropertyAccessorImpl(psi, session, propertyTypeRef, symbol, isGetter, FirDeclarationStatusImpl(visibility, Modality.FINAL)) { ) : FirPropertyAccessorImpl(source, session, propertyTypeRef, symbol, isGetter, FirDeclarationStatusImpl(visibility, Modality.FINAL)) {
override var resolvePhase = FirResolvePhase.BODY_RESOLVE override var resolvePhase = FirResolvePhase.BODY_RESOLVE
final override var body: FirBlock? final override var body: FirBlock?
@@ -36,25 +36,25 @@ abstract class FirDefaultPropertyAccessor(
} }
class FirDefaultPropertyGetter( class FirDefaultPropertyGetter(
psi: PsiElement?, source: FirSourceElement?,
session: FirSession, session: FirSession,
propertyTypeRef: FirTypeRef, propertyTypeRef: FirTypeRef,
visibility: Visibility, visibility: Visibility,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
) : FirDefaultPropertyAccessor(psi, session, propertyTypeRef, isGetter = true, visibility = visibility, symbol = symbol) { ) : FirDefaultPropertyAccessor(source, session, propertyTypeRef, isGetter = true, visibility = visibility, symbol = symbol) {
override val valueParameters: MutableList<FirValueParameter> = mutableListOf() override val valueParameters: MutableList<FirValueParameter> = mutableListOf()
} }
class FirDefaultPropertySetter( class FirDefaultPropertySetter(
psi: PsiElement?, source: FirSourceElement?,
session: FirSession, session: FirSession,
propertyTypeRef: FirTypeRef, propertyTypeRef: FirTypeRef,
visibility: Visibility, visibility: Visibility,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
) : FirDefaultPropertyAccessor(psi, session, FirImplicitUnitTypeRef(psi), isGetter = false, visibility = visibility, symbol = symbol) { ) : FirDefaultPropertyAccessor(source, session, FirImplicitUnitTypeRef(source), isGetter = false, visibility = visibility, symbol = symbol) {
override val valueParameters: MutableList<FirValueParameter> = mutableListOf( override val valueParameters: MutableList<FirValueParameter> = mutableListOf(
FirDefaultSetterValueParameter( FirDefaultSetterValueParameter(
psi, source,
session, session,
propertyTypeRef, propertyTypeRef,
FirVariableSymbol( FirVariableSymbol(
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirDefaultSetterValueParameter( class FirDefaultSetterValueParameter(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override var returnTypeRef: FirTypeRef, override var returnTypeRef: FirTypeRef,
override val symbol: FirVariableSymbol<FirValueParameter> override val symbol: FirVariableSymbol<FirValueParameter>
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirEnumEntryImpl( class FirEnumEntryImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val name: Name, override val name: Name,
override val symbol: FirClassSymbol override val symbol: FirClassSymbol
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirErrorFunctionImpl( class FirErrorFunctionImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val reason: String, override val reason: String,
override val symbol: FirErrorFunctionSymbol override val symbol: FirErrorFunctionSymbol
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirImport
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirFileImpl( class FirFileImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val session: FirSession, override val session: FirSession,
override val name: String, override val name: String,
override val packageFqName: FqName override val packageFqName: FqName
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
class FirImportImpl( class FirImportImpl(
override val psi: PsiElement?, override val source: FirSourceElement?,
override val importedFqName: FqName?, override val importedFqName: FqName?,
override val isAllUnder: Boolean, override val isAllUnder: Boolean,
override val aliasName: Name? override val aliasName: Name?
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
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.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirModifiableClass : FirClass, FirAbstractAnnotatedElement { interface FirModifiableClass : FirClass, FirAbstractAnnotatedElement {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override var resolvePhase: FirResolvePhase override var resolvePhase: FirResolvePhase
override val classKind: ClassKind override val classKind: ClassKind
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
abstract class FirModifiableConstructor : FirPureAbstractElement(), FirConstructor, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { abstract class FirModifiableConstructor : FirPureAbstractElement(), FirConstructor, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
abstract override val psi: PsiElement? abstract override val source: FirSourceElement?
abstract override val session: FirSession abstract override val session: FirSession
abstract override var resolvePhase: FirResolvePhase abstract override var resolvePhase: FirResolvePhase
abstract override var returnTypeRef: FirTypeRef abstract override var returnTypeRef: FirTypeRef
@@ -5,8 +5,8 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F>, FirAbstractAnnotatedElement { interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F>, FirAbstractAnnotatedElement {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override var resolvePhase: FirResolvePhase override var resolvePhase: FirResolvePhase
override val annotations: MutableList<FirAnnotationCall> override val annotations: MutableList<FirAnnotationCall>
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.fir.declarations.impl package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
override val psi: PsiElement? override val source: FirSourceElement?
override val session: FirSession override val session: FirSession
override var resolvePhase: FirResolvePhase override var resolvePhase: FirResolvePhase
override val name: Name override val name: Name

Some files were not shown because too many files have changed in this diff Show More