FIR: Remove duplication of delegateExpression in property delegates
This commit is contained in:
committed by
teamcity
parent
196be93d42
commit
19e2409284
-9
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -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")
|
||||
}
|
||||
|
||||
+1
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user