FIR2IR: cache type parameters in delegated property
#KT-44030 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
78fa8814c4
commit
e05d26b9b0
@@ -19,11 +19,13 @@ import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
||||
import org.jetbrains.kotlin.fir.descriptors.FirPackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass
|
||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
|
||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyProperty
|
||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.resolve.firProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
|
||||
@@ -739,6 +741,12 @@ class Fir2IrDeclarationStorage(
|
||||
containingClass: ConeClassLikeLookupTag? = null,
|
||||
): IrProperty {
|
||||
classifierStorage.preCacheTypeParameters(property)
|
||||
if (property.delegate != null) {
|
||||
val delegateReference = (property.delegate as? FirQualifiedAccess)?.calleeReference as? FirResolvedNamedReference
|
||||
(delegateReference?.resolvedSymbol?.fir as? FirTypeParameterRefsOwner)?.let {
|
||||
classifierStorage.preCacheTypeParameters(it)
|
||||
}
|
||||
}
|
||||
val signature = if (isLocal) null else signatureComposer.composeSignature(property, containingClass)
|
||||
return property.convertWithOffsets { startOffset, endOffset ->
|
||||
val result = declareIrProperty(signature, property.containerSource) { symbol ->
|
||||
|
||||
+5
@@ -1848,6 +1848,11 @@ public class Fir2IrTextTestGenerated extends AbstractFir2IrTextTest {
|
||||
runTest("compiler/testData/ir/irText/firProblems/putIfAbsent.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("readWriteProperty.kt")
|
||||
public void testReadWriteProperty() throws Exception {
|
||||
runTest("compiler/testData/ir/irText/firProblems/readWriteProperty.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("recursiveCapturedTypeInPropertyReference.kt")
|
||||
public void testRecursiveCapturedTypeInPropertyReference() throws Exception {
|
||||
runTest("compiler/testData/ir/irText/firProblems/recursiveCapturedTypeInPropertyReference.kt");
|
||||
|
||||
Reference in New Issue
Block a user