FIR: Remove duplication of delegateExpression in property delegates

This commit is contained in:
Simon Ogorodnik
2021-11-14 15:35:20 +03:00
committed by teamcity
parent 196be93d42
commit 19e2409284
4 changed files with 10 additions and 14 deletions
@@ -1129,17 +1129,12 @@ class DeclarationsConverter(
isLateInit = modifiers.hasLateinit()
}
val receiver = delegateExpression?.let {
expressionConverter.getAsFirExpression<FirExpression>(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<FirExpression>(it, "Should have delegate")
}
generateAccessorsByDelegate(
delegateBuilder,
baseModuleData,
@@ -1218,7 +1210,6 @@ class DeclarationsConverter(
classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount,
context,
isExtension = receiverType != null,
receiver = receiver
)
}
}
@@ -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()
)
}
}
@@ -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")
}
@@ -347,7 +347,6 @@ fun <T> FirPropertyBuilder.generateAccessorsByDelegate(
ownerRegularClassTypeParametersCount: Int?,
context: Context<T>,
isExtension: Boolean,
receiver: FirExpression?
) {
if (delegateBuilder == null) return
val delegateFieldSymbol = FirDelegateFieldSymbol(symbol.callableId).also {
@@ -430,7 +429,7 @@ fun <T> FirPropertyBuilder.generateAccessorsByDelegate(
}
delegateBuilder.delegateProvider = buildFunctionCall {
explicitReceiver = receiver
explicitReceiver = delegateBuilder.expression
calleeReference = buildSimpleNamedReference {
source = fakeSource
name = OperatorNameConventions.PROVIDE_DELEGATE