diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 9dadb3ef49f..925cbbdff41 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1129,17 +1129,12 @@ class DeclarationsConverter( isLateInit = modifiers.hasLateinit() } - val receiver = delegateExpression?.let { - expressionConverter.getAsFirExpression(it, "Incorrect delegate expression") - } - generateAccessorsByDelegate( delegateBuilder, baseModuleData, classWrapper?.classBuilder?.ownerRegularOrAnonymousObjectSymbol, classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount, isExtension = false, - receiver = receiver, context = context ) } else { @@ -1208,9 +1203,6 @@ class DeclarationsConverter( isExternal = modifiers.hasExternal() } - val receiver = delegateExpression?.let { - expressionConverter.getAsFirExpression(it, "Should have delegate") - } generateAccessorsByDelegate( delegateBuilder, baseModuleData, @@ -1218,7 +1210,6 @@ class DeclarationsConverter( classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount, context, isExtension = receiverType != null, - receiver = receiver ) } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 17f0785c411..a8dca1fcf93 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1560,8 +1560,7 @@ open class RawFirBuilder( ownerRegularOrAnonymousObjectSymbol = null, ownerRegularClassTypeParametersCount = null, isExtension = false, - receiver = extractDelegateExpression(), - context = context + context = context, ) } } else { @@ -1626,7 +1625,6 @@ open class RawFirBuilder( ownerRegularClassTypeParametersCount, context, isExtension = receiverTypeReference != null, - receiver = extractDelegateExpression() ) } } diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt index 9a09a2dec77..520b49a8426 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotationArgumentMapping import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement import org.jetbrains.kotlin.fir.references.impl.FirStubReference @@ -33,7 +34,9 @@ import org.jetbrains.kotlin.fir.types.isExtensionFunctionAnnotationCall import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.parsing.KotlinParserDefinition +import org.jetbrains.kotlin.psi import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtPropertyDelegate import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase @@ -191,6 +194,11 @@ private fun throwTwiceVisitingError(element: FirElement) { ) { return } + if (element is FirExpression) { + val psiParent = element.source?.psi?.parent + if (psiParent is KtPropertyDelegate || psiParent?.parent is KtPropertyDelegate) return + } + val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString() throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump") } diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index d76d43a558a..735db8c0144 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -347,7 +347,6 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( ownerRegularClassTypeParametersCount: Int?, context: Context, isExtension: Boolean, - receiver: FirExpression? ) { if (delegateBuilder == null) return val delegateFieldSymbol = FirDelegateFieldSymbol(symbol.callableId).also { @@ -430,7 +429,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( } delegateBuilder.delegateProvider = buildFunctionCall { - explicitReceiver = receiver + explicitReceiver = delegateBuilder.expression calleeReference = buildSimpleNamedReference { source = fakeSource name = OperatorNameConventions.PROVIDE_DELEGATE