FIR: Rename FirSourceElement::withKind to fakeElement

And reinforce its contract
This commit is contained in:
Denis Zharkov
2020-07-17 11:48:37 +03:00
parent 376d3385d0
commit fea1fb0fc3
28 changed files with 66 additions and 68 deletions
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.types.builder.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
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.lexer.KtTokens.CLOSING_QUOTE import org.jetbrains.kotlin.lexer.KtTokens.CLOSING_QUOTE
import org.jetbrains.kotlin.lexer.KtTokens.OPEN_QUOTE import org.jetbrains.kotlin.lexer.KtTokens.OPEN_QUOTE
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -341,7 +340,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
SHORT_STRING_TEMPLATE_ENTRY, LONG_STRING_TEMPLATE_ENTRY -> { SHORT_STRING_TEMPLATE_ENTRY, LONG_STRING_TEMPLATE_ENTRY -> {
hasExpressions = true hasExpressions = true
val firExpression = entry.convertTemplateEntry("Incorrect template argument") val firExpression = entry.convertTemplateEntry("Incorrect template argument")
val source = firExpression.source?.withKind(FirFakeSourceElementKind.GeneratedToStringCallOnTemplateEntry) val source = firExpression.source?.fakeElement(FirFakeSourceElementKind.GeneratedToStringCallOnTemplateEntry)
buildFunctionCall { buildFunctionCall {
this.source = source this.source = source
explicitReceiver = firExpression explicitReceiver = firExpression
@@ -408,7 +407,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
} }
return buildBlock { return buildBlock {
val baseSource = baseExpression?.toFirSourceElement() val baseSource = baseExpression?.toFirSourceElement()
val desugaredSource = baseSource?.withKind(FirFakeSourceElementKind.DesugaredIncrementOrDecrement) val desugaredSource = baseSource?.fakeElement(FirFakeSourceElementKind.DesugaredIncrementOrDecrement)
source = desugaredSource source = desugaredSource
val tempName = Name.special("<unary>") val tempName = Name.special("<unary>")
val temporaryVariable = generateTemporaryVariable( val temporaryVariable = generateTemporaryVariable(
@@ -744,7 +743,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
componentIndex++ componentIndex++
val parameterSource = sourceNode?.toFirSourceElement() val parameterSource = sourceNode?.toFirSourceElement()
val componentFunction = buildSimpleFunction { val componentFunction = buildSimpleFunction {
source = parameterSource?.withKind(FirFakeSourceElementKind.DataClassGeneratedMembers) source = parameterSource?.fakeElement(FirFakeSourceElementKind.DataClassGeneratedMembers)
session = this@DataClassMembersGenerator.session session = this@DataClassMembersGenerator.session
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = firProperty.returnTypeRef returnTypeRef = firProperty.returnTypeRef
@@ -170,9 +170,9 @@ fun FirExpression.generateContainsOperation(
if (!inverted) return containsCall if (!inverted) return containsCall
return buildFunctionCall { return buildFunctionCall {
source = baseSource?.withKind(FirFakeSourceElementKind.DesugaredInvertedContains) source = baseSource?.fakeElement(FirFakeSourceElementKind.DesugaredInvertedContains)
calleeReference = buildSimpleNamedReference { calleeReference = buildSimpleNamedReference {
source = operationReferenceSource?.withKind(FirFakeSourceElementKind.DesugaredInvertedContains) source = operationReferenceSource?.fakeElement(FirFakeSourceElementKind.DesugaredInvertedContains)
name = OperatorNameConventions.NOT name = OperatorNameConventions.NOT
} }
explicitReceiver = containsCall explicitReceiver = containsCall
@@ -191,7 +191,7 @@ fun FirExpression.generateComparisonExpression(
val compareToCall = createConventionCall( val compareToCall = createConventionCall(
operationReferenceSource, operationReferenceSource,
baseSource?.withKind(FirFakeSourceElementKind.GeneratedCompararisonExpression), baseSource?.fakeElement(FirFakeSourceElementKind.GeneratedCompararisonExpression),
argument, argument,
OperatorNameConventions.COMPARE_TO OperatorNameConventions.COMPARE_TO
) )
@@ -483,6 +483,6 @@ fun FirModifiableQualifiedAccess.wrapWithSafeCall(receiver: FirExpression): FirS
bind(checkedSafeCallSubject) bind(checkedSafeCallSubject)
} }
this.regularQualifiedAccess = this@wrapWithSafeCall this.regularQualifiedAccess = this@wrapWithSafeCall
this.source = this@wrapWithSafeCall.source?.withKind(FirFakeSourceElementKind.DesugaredSafeCallExpression) this.source = this@wrapWithSafeCall.source?.fakeElement(FirFakeSourceElementKind.DesugaredSafeCallExpression)
} }
} }
@@ -105,7 +105,7 @@ internal fun generateDestructuringBlock(
returnTypeRef = entry.typeReference.toFirOrImplicitTypeRef() returnTypeRef = entry.typeReference.toFirOrImplicitTypeRef()
this.name = name this.name = name
initializer = buildComponentCall { initializer = buildComponentCall {
val componentCallSource = entrySource.withKind(FirFakeSourceElementKind.DesugaredComponentFunctionCall) val componentCallSource = entrySource.fakeElement(FirFakeSourceElementKind.DesugaredComponentFunctionCall)
source = componentCallSource source = componentCallSource
explicitReceiver = generateResolvedAccessExpression(componentCallSource, container) explicitReceiver = generateResolvedAccessExpression(componentCallSource, container)
componentIndex = index + 1 componentIndex = index + 1
@@ -311,7 +311,7 @@ class RawFirBuilder(
extractValueParametersTo(this, propertyTypeRef) extractValueParametersTo(this, propertyTypeRef)
if (!isGetter && valueParameters.isEmpty()) { if (!isGetter && valueParameters.isEmpty()) {
valueParameters += buildDefaultSetterValueParameter { valueParameters += buildDefaultSetterValueParameter {
this.source = source.withKind(FirFakeSourceElementKind.DefaultAccessor) this.source = source.fakeElement(FirFakeSourceElementKind.DefaultAccessor)
session = baseSession session = baseSession
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = propertyTypeRef returnTypeRef = propertyTypeRef
@@ -384,7 +384,7 @@ class RawFirBuilder(
symbol = FirPropertySymbol(callableIdForName(propertyName)) symbol = FirPropertySymbol(callableIdForName(propertyName))
isLocal = false isLocal = false
this.status = status this.status = status
val defaultAccessorSource = propertySource.withKind(FirFakeSourceElementKind.DefaultAccessor) val defaultAccessorSource = propertySource.fakeElement(FirFakeSourceElementKind.DefaultAccessor)
getter = FirDefaultPropertyGetter(defaultAccessorSource, baseSession, FirDeclarationOrigin.Source, type, visibility) getter = FirDefaultPropertyGetter(defaultAccessorSource, baseSession, FirDeclarationOrigin.Source, type, visibility)
setter = if (isMutable) FirDefaultPropertySetter( setter = if (isMutable) FirDefaultPropertySetter(
defaultAccessorSource, defaultAccessorSource,
@@ -574,7 +574,7 @@ class RawFirBuilder(
val constructorSource = this?.toFirSourceElement() val constructorSource = this?.toFirSourceElement()
?: owner.toFirPsiSourceElement(FirFakeSourceElementKind.ImplicitConstructor) ?: owner.toFirPsiSourceElement(FirFakeSourceElementKind.ImplicitConstructor)
val firDelegatedCall = buildDelegatedConstructorCall { val firDelegatedCall = buildDelegatedConstructorCall {
source = constructorCallee ?: constructorSource.withKind(FirFakeSourceElementKind.DelegatingConstructorCall) source = constructorCallee ?: constructorSource.fakeElement(FirFakeSourceElementKind.DelegatingConstructorCall)
constructedTypeRef = delegatedSuperTypeRef constructedTypeRef = delegatedSuperTypeRef
isThis = false isThis = false
if (!stubMode) { if (!stubMode) {
@@ -995,7 +995,7 @@ class RawFirBuilder(
val expressionSource = expression.toFirSourceElement() val expressionSource = expression.toFirSourceElement()
label = context.firLabels.pop() ?: context.calleeNamesForLambda.lastOrNull()?.let { label = context.firLabels.pop() ?: context.calleeNamesForLambda.lastOrNull()?.let {
buildLabel { buildLabel {
source = expressionSource.withKind(FirFakeSourceElementKind.GeneratedLambdaLabel) source = expressionSource.fakeElement(FirFakeSourceElementKind.GeneratedLambdaLabel)
name = it.asString() name = it.asString()
} }
} }
@@ -1011,10 +1011,10 @@ class RawFirBuilder(
if (statements.isEmpty()) { if (statements.isEmpty()) {
statements.add( statements.add(
buildReturnExpression { buildReturnExpression {
source = expressionSource.withKind(FirFakeSourceElementKind.ImplicitReturn) source = expressionSource.fakeElement(FirFakeSourceElementKind.ImplicitReturn)
this.target = target this.target = target
result = buildUnitExpression { result = buildUnitExpression {
source = expressionSource.withKind(FirFakeSourceElementKind.ImplicitUnit) source = expressionSource.fakeElement(FirFakeSourceElementKind.ImplicitUnit)
} }
} }
) )
@@ -1706,7 +1706,7 @@ class RawFirBuilder(
else -> { else -> {
buildSimpleNamedReference { buildSimpleNamedReference {
source = defaultSource.withKind(FirFakeSourceElementKind.ImplicitInvokeCall) source = defaultSource.fakeElement(FirFakeSourceElementKind.ImplicitInvokeCall)
name = OperatorNameConventions.INVOKE name = OperatorNameConventions.INVOKE
} to calleeExpression.toFirExpression("Incorrect invoke receiver") } to calleeExpression.toFirExpression("Incorrect invoke receiver")
} }
@@ -1793,7 +1793,7 @@ class RawFirBuilder(
val sourceElement = expression.toFirSourceElement() val sourceElement = expression.toFirSourceElement()
source = sourceElement source = sourceElement
calleeReference = buildExplicitThisReference { calleeReference = buildExplicitThisReference {
source = sourceElement.withKind(FirFakeSourceElementKind.ExplicitThisOrSuperReference) source = sourceElement.fakeElement(FirFakeSourceElementKind.ExplicitThisOrSuperReference)
labelName = expression.getLabelName() labelName = expression.getLabelName()
} }
} }
@@ -1805,7 +1805,7 @@ class RawFirBuilder(
return buildQualifiedAccessExpression { return buildQualifiedAccessExpression {
this.source = source this.source = source
calleeReference = buildExplicitSuperReference { calleeReference = buildExplicitSuperReference {
source.withKind(FirFakeSourceElementKind.ExplicitThisOrSuperReference) source.fakeElement(FirFakeSourceElementKind.ExplicitThisOrSuperReference)
labelName = expression.getLabelName() labelName = expression.getLabelName()
superTypeRef = superType.toFirOrImplicitType() superTypeRef = superType.toFirOrImplicitType()
} }
@@ -222,7 +222,7 @@ fun FirFunction<*>.constructFunctionalTypeRef(isSuspend: Boolean = false): FirRe
val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneType, rawReturnType, isSuspend = isSuspend) val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneType, rawReturnType, isSuspend = isSuspend)
return buildResolvedTypeRef { return buildResolvedTypeRef {
source = this@constructFunctionalTypeRef.source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef) source = this@constructFunctionalTypeRef.source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef)
type = functionalType type = functionalType
this.isSuspend = isSuspend this.isSuspend = isSuspend
} }
@@ -325,7 +325,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 ->
buildErrorTypeRef { buildErrorTypeRef {
source = access.source?.withKind(FirFakeSourceElementKind.ErrorTypeRef) source = access.source?.fakeElement(FirFakeSourceElementKind.ErrorTypeRef)
diagnostic = ConeStubDiagnostic(newCallee.diagnostic) diagnostic = ConeStubDiagnostic(newCallee.diagnostic)
} }
is FirNamedReferenceWithCandidate -> { is FirNamedReferenceWithCandidate -> {
@@ -390,7 +390,7 @@ fun BodyResolveComponents.transformQualifiedAccessUsingSmartcastInfo(qualifiedAc
val intersectedType = ConeTypeIntersector.intersectTypes(inferenceComponents.ctx, allTypes) val intersectedType = ConeTypeIntersector.intersectTypes(inferenceComponents.ctx, 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 = buildResolvedTypeRef { val intersectedTypeRef = buildResolvedTypeRef {
source = qualifiedAccessExpression.resultType.source?.withKind(FirFakeSourceElementKind.SmartCastedTypeRef) source = qualifiedAccessExpression.resultType.source?.fakeElement(FirFakeSourceElementKind.SmartCastedTypeRef)
type = intersectedType type = intersectedType
annotations += qualifiedAccessExpression.resultType.annotations annotations += qualifiedAccessExpression.resultType.annotations
} }
@@ -686,7 +686,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
override fun <E : FirElement> transformElement(element: E, data: FirExpression): CompositeTransformResult<E> { override fun <E : FirElement> transformElement(element: E, data: FirExpression): CompositeTransformResult<E> {
if (element == lastStatement) { if (element == lastStatement) {
val returnExpression = buildReturnExpression { val returnExpression = buildReturnExpression {
source = element.source?.withKind(FirFakeSourceElementKind.ImplicitReturn) source = element.source?.fakeElement(FirFakeSourceElementKind.ImplicitReturn)
result = lastStatement result = lastStatement
target = FirFunctionTarget(null, isLambda = this@addReturn.isLambda).also { target = FirFunctionTarget(null, isLambda = this@addReturn.isLambda).also {
it.bind(this@addReturn) it.bind(this@addReturn)
@@ -317,7 +317,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
rightArgument = rightArgument.transformSingle(transformer, ResolutionMode.ContextDependent) rightArgument = rightArgument.transformSingle(transformer, ResolutionMode.ContextDependent)
fun createFunctionCall(name: Name) = buildFunctionCall { fun createFunctionCall(name: Name) = buildFunctionCall {
source = operatorCall.source?.withKind(FirFakeSourceElementKind.DesugaredCompoundAssignment) source = operatorCall.source?.fakeElement(FirFakeSourceElementKind.DesugaredCompoundAssignment)
explicitReceiver = leftArgument explicitReceiver = leftArgument
argumentList = buildUnaryArgumentList(rightArgument) argumentList = buildUnaryArgumentList(rightArgument)
calleeReference = buildSimpleNamedReference { calleeReference = buildSimpleNamedReference {
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.withKind import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -548,12 +548,18 @@ fun FirTypeRef.withReplacedReturnType(newType: ConeKotlinType?): FirTypeRef {
} }
} }
fun FirTypeRef.withReplacedConeType(newType: ConeKotlinType?, sourceElementKind: FirFakeSourceElementKind? = null): FirResolvedTypeRef { fun FirTypeRef.withReplacedConeType(
newType: ConeKotlinType?,
firFakeSourceElementKind: FirFakeSourceElementKind? = null
): FirResolvedTypeRef {
require(this is FirResolvedTypeRef) require(this is FirResolvedTypeRef)
if (newType == null) return this if (newType == null) return this
return buildResolvedTypeRef { return buildResolvedTypeRef {
source = this@withReplacedConeType.source?.withKind(sourceElementKind) source = if (firFakeSourceElementKind != null)
this@withReplacedConeType.source?.fakeElement(firFakeSourceElementKind)
else
this@withReplacedConeType.source
type = newType type = newType
annotations += this@withReplacedConeType.annotations annotations += this@withReplacedConeType.annotations
} }
@@ -17,10 +17,10 @@ import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirLoopJumpBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirLoopJumpBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirBreakExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirBreakExpressionImpl
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -17,10 +17,10 @@ import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirLoopJumpBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirLoopJumpBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirContinueExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirContinueExpressionImpl
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
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.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -17,10 +17,10 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirReturnExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirReturnExpressionImpl
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -16,10 +16,10 @@ import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirStringConcatenationCallImpl import org.jetbrains.kotlin.fir.expressions.impl.FirStringConcatenationCallImpl
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -15,10 +15,10 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirThrowExpression import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirThrowExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirThrowExpressionImpl
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
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.impl.FirUnitExpression import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.withKind
/* /*
* This file was generated automatically * This file was generated automatically
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.fir.FirTarget
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBreakExpression import org.jetbrains.kotlin.fir.expressions.FirBreakExpression
import org.jetbrains.kotlin.fir.expressions.FirLoop import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -26,7 +26,7 @@ internal class FirBreakExpressionImpl(
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val target: FirTarget<FirLoop>, override val target: FirTarget<FirLoop>,
) : FirBreakExpression() { ) : FirBreakExpression() {
override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
@@ -11,9 +11,9 @@ import org.jetbrains.kotlin.fir.FirTarget
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirContinueExpression import org.jetbrains.kotlin.fir.expressions.FirContinueExpression
import org.jetbrains.kotlin.fir.expressions.FirLoop import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -26,7 +26,7 @@ internal class FirContinueExpressionImpl(
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val target: FirTarget<FirLoop>, override val target: FirTarget<FirLoop>,
) : FirContinueExpression() { ) : FirContinueExpression() {
override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
@@ -10,9 +10,9 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement 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.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -24,7 +24,7 @@ class FirElseIfTrueCondition @FirImplementationDetail constructor(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
) : FirExpression() { ) : FirExpression() {
override var typeRef: FirTypeRef = FirImplicitBooleanTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitBooleanTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
@@ -12,9 +12,9 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
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.FirReturnExpression import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -28,7 +28,7 @@ internal class FirReturnExpressionImpl(
override val target: FirTarget<FirFunction<*>>, override val target: FirTarget<FirFunction<*>>,
override var result: FirExpression, override var result: FirExpression,
) : FirReturnExpression() { ) : FirReturnExpression() {
override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
@@ -10,9 +10,9 @@ 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.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -25,7 +25,7 @@ internal class FirStringConcatenationCallImpl(
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override var argumentList: FirArgumentList, override var argumentList: FirArgumentList,
) : FirStringConcatenationCall() { ) : FirStringConcatenationCall() {
override var typeRef: FirTypeRef = FirImplicitStringTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitStringTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) } annotations.forEach { it.accept(visitor, data) }
@@ -10,9 +10,9 @@ 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.FirThrowExpression import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -25,7 +25,7 @@ internal class FirThrowExpressionImpl(
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override var exception: FirExpression, override var exception: FirExpression,
) : FirThrowExpression() { ) : FirThrowExpression() {
override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
@@ -10,9 +10,9 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement 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.fakeElement
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
import org.jetbrains.kotlin.fir.withKind
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -24,7 +24,7 @@ class FirUnitExpression @FirImplementationDetail constructor(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
) : FirExpression() { ) : FirExpression() {
override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef)) override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data) typeRef.accept(visitor, data)
@@ -32,7 +32,7 @@ private val VALUE = Name.identifier("value")
fun FirRegularClassBuilder.generateValuesFunction( fun FirRegularClassBuilder.generateValuesFunction(
session: FirSession, packageFqName: FqName, classFqName: FqName, makeExpect: Boolean = false session: FirSession, packageFqName: FqName, classFqName: FqName, makeExpect: Boolean = false
) { ) {
val sourceElement = source?.withKind(FirFakeSourceElementKind.EnumGeneratedDeclaration) val sourceElement = source?.fakeElement(FirFakeSourceElementKind.EnumGeneratedDeclaration)
declarations += buildSimpleFunction { declarations += buildSimpleFunction {
source = sourceElement source = sourceElement
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
@@ -61,7 +61,7 @@ fun FirRegularClassBuilder.generateValuesFunction(
fun FirRegularClassBuilder.generateValueOfFunction( fun FirRegularClassBuilder.generateValueOfFunction(
session: FirSession, packageFqName: FqName, classFqName: FqName, makeExpect: Boolean = false session: FirSession, packageFqName: FqName, classFqName: FqName, makeExpect: Boolean = false
) { ) {
val sourceElement = source?.withKind(FirFakeSourceElementKind.EnumGeneratedDeclaration) val sourceElement = source?.fakeElement(FirFakeSourceElementKind.EnumGeneratedDeclaration)
declarations += buildSimpleFunction { declarations += buildSimpleFunction {
source = sourceElement source = sourceElement
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
@@ -165,15 +165,10 @@ class FirRealPsiSourceElement<out P : PsiElement>(psi: P) : FirPsiSourceElement<
class FirFakeSourceElement<out P : PsiElement>(psi: P, override val kind: FirFakeSourceElementKind) : FirPsiSourceElement<P>(psi) class FirFakeSourceElement<out P : PsiElement>(psi: P, override val kind: FirFakeSourceElementKind) : FirPsiSourceElement<P>(psi)
fun FirSourceElement.withKind(newKind: FirSourceElementKind?): FirSourceElement { fun FirSourceElement.fakeElement(newKind: FirFakeSourceElementKind): FirSourceElement {
if (newKind == null) return this
return when (this) { return when (this) {
is FirLightSourceElement -> this is FirLightSourceElement -> this
is FirPsiSourceElement<*> -> when (newKind) { is FirPsiSourceElement<*> -> FirFakeSourceElement(psi, newKind)
kind -> this
FirRealSourceElementKind -> FirRealPsiSourceElement(psi)
is FirFakeSourceElementKind -> FirFakeSourceElement(psi, newKind)
}
} }
} }
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.types.builder.*
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.*
import org.jetbrains.kotlin.fir.types.impl.FirFunctionTypeRefImpl
fun ModuleInfo.dependenciesWithoutSelf(): Sequence<ModuleInfo> = dependencies().asSequence().filter { it != this } fun ModuleInfo.dependenciesWithoutSelf(): Sequence<ModuleInfo> = dependencies().asSequence().filter { it != this }
@@ -25,7 +24,7 @@ fun <R : FirTypeRef> R.copyWithNewSourceKind(newKind: FirFakeSourceElementKind):
if (source == null) return this if (source == null) return this
if (source?.kind == newKind) return this if (source?.kind == newKind) return this
if (this is FirDelegatedTypeRef) return this if (this is FirDelegatedTypeRef) return this
val newSource = source?.withKind(newKind) val newSource = source?.fakeElement(newKind)
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
return when (val typeRef = this) { return when (val typeRef = this) {
@@ -17,13 +17,13 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.visitors.transformInplace import org.jetbrains.kotlin.fir.visitors.transformInplace
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.fir.withKind import org.jetbrains.kotlin.fir.fakeElement
class FirSingleExpressionBlock( class FirSingleExpressionBlock(
var statement: FirStatement var statement: FirStatement
) : FirBlock(), FirAnnotationContainer { ) : FirBlock(), FirAnnotationContainer {
override val source: FirSourceElement? override val source: FirSourceElement?
get() = statement.source?.withKind(FirFakeSourceElementKind.SingleExpressionBlock) get() = statement.source?.fakeElement(FirFakeSourceElementKind.SingleExpressionBlock)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val statements: List<FirStatement> get() = listOf(statement) override val statements: List<FirStatement> get() = listOf(statement)
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.withKind import org.jetbrains.kotlin.fir.fakeElement
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
sealed class FirImplicitBuiltinTypeRef( sealed class FirImplicitBuiltinTypeRef(
@@ -138,7 +138,7 @@ class FirImplicitKMutableProperty2TypeRef(
fun FirImplicitBuiltinTypeRef.withFakeSource(kind: FirFakeSourceElementKind): FirImplicitBuiltinTypeRef { fun FirImplicitBuiltinTypeRef.withFakeSource(kind: FirFakeSourceElementKind): FirImplicitBuiltinTypeRef {
val source = source ?: return this val source = source ?: return this
if (source.kind == kind) return this if (source.kind == kind) return this
val newSource = source.withKind(kind) val newSource = source.fakeElement(kind)
return when (this) { return when (this) {
is FirImplicitUnitTypeRef -> FirImplicitUnitTypeRef(newSource) is FirImplicitUnitTypeRef -> FirImplicitUnitTypeRef(newSource)
is FirImplicitAnyTypeRef -> FirImplicitAnyTypeRef(newSource) is FirImplicitAnyTypeRef -> FirImplicitAnyTypeRef(newSource)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.tree.generator.context package org.jetbrains.kotlin.fir.tree.generator.context
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.tree.generator.model.* import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.noReceiverExpressionType import org.jetbrains.kotlin.fir.tree.generator.noReceiverExpressionType
import org.jetbrains.kotlin.fir.tree.generator.printer.call import org.jetbrains.kotlin.fir.tree.generator.printer.call
@@ -123,9 +122,9 @@ abstract class AbstractFirTreeImplementationConfigurator {
} }
fun defaultTypeRefWithSource(typeRefClass: String) { fun defaultTypeRefWithSource(typeRefClass: String) {
default("typeRef", "$typeRefClass(source?.withKind(FirFakeSourceElementKind.ImplicitTypeRef))") default("typeRef", "$typeRefClass(source?.fakeElement(FirFakeSourceElementKind.ImplicitTypeRef))")
implementation.arbitraryImportables += ArbitraryImportable("org.jetbrains.kotlin.fir", "FirFakeSourceElementKind") implementation.arbitraryImportables += ArbitraryImportable("org.jetbrains.kotlin.fir", "FirFakeSourceElementKind")
implementation.arbitraryImportables += ArbitraryImportable("org.jetbrains.kotlin.fir", "withKind") implementation.arbitraryImportables += ArbitraryImportable("org.jetbrains.kotlin.fir", "fakeElement")
} }
fun defaultTrue(field: String, withGetter: Boolean = false) { fun defaultTrue(field: String, withGetter: Boolean = false) {