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()
|
isLateInit = modifiers.hasLateinit()
|
||||||
}
|
}
|
||||||
|
|
||||||
val receiver = delegateExpression?.let {
|
|
||||||
expressionConverter.getAsFirExpression<FirExpression>(it, "Incorrect delegate expression")
|
|
||||||
}
|
|
||||||
|
|
||||||
generateAccessorsByDelegate(
|
generateAccessorsByDelegate(
|
||||||
delegateBuilder,
|
delegateBuilder,
|
||||||
baseModuleData,
|
baseModuleData,
|
||||||
classWrapper?.classBuilder?.ownerRegularOrAnonymousObjectSymbol,
|
classWrapper?.classBuilder?.ownerRegularOrAnonymousObjectSymbol,
|
||||||
classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount,
|
classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount,
|
||||||
isExtension = false,
|
isExtension = false,
|
||||||
receiver = receiver,
|
|
||||||
context = context
|
context = context
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
@@ -1208,9 +1203,6 @@ class DeclarationsConverter(
|
|||||||
isExternal = modifiers.hasExternal()
|
isExternal = modifiers.hasExternal()
|
||||||
}
|
}
|
||||||
|
|
||||||
val receiver = delegateExpression?.let {
|
|
||||||
expressionConverter.getAsFirExpression<FirExpression>(it, "Should have delegate")
|
|
||||||
}
|
|
||||||
generateAccessorsByDelegate(
|
generateAccessorsByDelegate(
|
||||||
delegateBuilder,
|
delegateBuilder,
|
||||||
baseModuleData,
|
baseModuleData,
|
||||||
@@ -1218,7 +1210,6 @@ class DeclarationsConverter(
|
|||||||
classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount,
|
classWrapper?.classBuilder?.ownerRegularClassTypeParametersCount,
|
||||||
context,
|
context,
|
||||||
isExtension = receiverType != null,
|
isExtension = receiverType != null,
|
||||||
receiver = receiver
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1560,8 +1560,7 @@ open class RawFirBuilder(
|
|||||||
ownerRegularOrAnonymousObjectSymbol = null,
|
ownerRegularOrAnonymousObjectSymbol = null,
|
||||||
ownerRegularClassTypeParametersCount = null,
|
ownerRegularClassTypeParametersCount = null,
|
||||||
isExtension = false,
|
isExtension = false,
|
||||||
receiver = extractDelegateExpression(),
|
context = context,
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1626,7 +1625,6 @@ open class RawFirBuilder(
|
|||||||
ownerRegularClassTypeParametersCount,
|
ownerRegularClassTypeParametersCount,
|
||||||
context,
|
context,
|
||||||
isExtension = receiverTypeReference != null,
|
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.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationArgumentMapping
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationArgumentMapping
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
|
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.FirNoReceiverExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement
|
import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirStubReference
|
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.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
|
import org.jetbrains.kotlin.psi
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.psi.KtPropertyDelegate
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.KtPsiFactory
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase
|
import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase
|
||||||
@@ -191,6 +194,11 @@ private fun throwTwiceVisitingError(element: FirElement) {
|
|||||||
) {
|
) {
|
||||||
return
|
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()
|
val elementDump = StringBuilder().also { element.accept(FirRenderer(it)) }.toString()
|
||||||
throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump")
|
throw AssertionError("FirElement ${element.javaClass} is visited twice: $elementDump")
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -347,7 +347,6 @@ fun <T> FirPropertyBuilder.generateAccessorsByDelegate(
|
|||||||
ownerRegularClassTypeParametersCount: Int?,
|
ownerRegularClassTypeParametersCount: Int?,
|
||||||
context: Context<T>,
|
context: Context<T>,
|
||||||
isExtension: Boolean,
|
isExtension: Boolean,
|
||||||
receiver: FirExpression?
|
|
||||||
) {
|
) {
|
||||||
if (delegateBuilder == null) return
|
if (delegateBuilder == null) return
|
||||||
val delegateFieldSymbol = FirDelegateFieldSymbol(symbol.callableId).also {
|
val delegateFieldSymbol = FirDelegateFieldSymbol(symbol.callableId).also {
|
||||||
@@ -430,7 +429,7 @@ fun <T> FirPropertyBuilder.generateAccessorsByDelegate(
|
|||||||
}
|
}
|
||||||
|
|
||||||
delegateBuilder.delegateProvider = buildFunctionCall {
|
delegateBuilder.delegateProvider = buildFunctionCall {
|
||||||
explicitReceiver = receiver
|
explicitReceiver = delegateBuilder.expression
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
source = fakeSource
|
source = fakeSource
|
||||||
name = OperatorNameConventions.PROVIDE_DELEGATE
|
name = OperatorNameConventions.PROVIDE_DELEGATE
|
||||||
|
|||||||
Reference in New Issue
Block a user