[FIR] Fix missing initialization of backingField for properties from primary constructor
This commit is contained in:
committed by
teamcity
parent
194741b96b
commit
e1fd184d14
@@ -67,54 +67,3 @@ fun FirTypeRef.errorTypeFromPrototype(
|
|||||||
this.diagnostic = diagnostic
|
this.diagnostic = diagnostic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirDeclarationStatus.copy(
|
|
||||||
visibility: Visibility? = this.visibility,
|
|
||||||
modality: Modality? = this.modality,
|
|
||||||
isExpect: Boolean = this.isExpect,
|
|
||||||
isActual: Boolean = this.isActual,
|
|
||||||
isOverride: Boolean = this.isOverride,
|
|
||||||
isOperator: Boolean = this.isOperator,
|
|
||||||
isInfix: Boolean = this.isInfix,
|
|
||||||
isInline: Boolean = this.isInline,
|
|
||||||
isTailRec: Boolean = this.isTailRec,
|
|
||||||
isExternal: Boolean = this.isExternal,
|
|
||||||
isConst: Boolean = this.isConst,
|
|
||||||
isLateInit: Boolean = this.isLateInit,
|
|
||||||
isInner: Boolean = this.isInner,
|
|
||||||
isCompanion: Boolean = this.isCompanion,
|
|
||||||
isData: Boolean = this.isData,
|
|
||||||
isSuspend: Boolean = this.isSuspend,
|
|
||||||
isStatic: Boolean = this.isStatic,
|
|
||||||
isFromSealedClass: Boolean = this.isFromSealedClass,
|
|
||||||
isFromEnumClass: Boolean = this.isFromEnumClass,
|
|
||||||
isFun: Boolean = this.isFun,
|
|
||||||
): FirDeclarationStatus {
|
|
||||||
val newVisibility = visibility ?: this.visibility
|
|
||||||
val newModality = modality ?: this.modality
|
|
||||||
val newStatus = if (this is FirResolvedDeclarationStatus) {
|
|
||||||
FirResolvedDeclarationStatusImpl(newVisibility, newModality!!, effectiveVisibility)
|
|
||||||
} else {
|
|
||||||
FirDeclarationStatusImpl(newVisibility, newModality)
|
|
||||||
}
|
|
||||||
return newStatus.apply {
|
|
||||||
this.isExpect = isExpect
|
|
||||||
this.isActual = isActual
|
|
||||||
this.isOverride = isOverride
|
|
||||||
this.isOperator = isOperator
|
|
||||||
this.isInfix = isInfix
|
|
||||||
this.isInline = isInline
|
|
||||||
this.isTailRec = isTailRec
|
|
||||||
this.isExternal = isExternal
|
|
||||||
this.isConst = isConst
|
|
||||||
this.isLateInit = isLateInit
|
|
||||||
this.isInner = isInner
|
|
||||||
this.isCompanion = isCompanion
|
|
||||||
this.isData = isData
|
|
||||||
this.isSuspend = isSuspend
|
|
||||||
this.isStatic = isStatic
|
|
||||||
this.isFromSealedClass = isFromSealedClass
|
|
||||||
this.isFromEnumClass = isFromEnumClass
|
|
||||||
this.isFun = isFun
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
+9
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
|
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyBackingField
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
|
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
|
||||||
@@ -83,6 +84,14 @@ class ValueParameter(
|
|||||||
isConst = modifiers.hasConst()
|
isConst = modifiers.hasConst()
|
||||||
isLateInit = false
|
isLateInit = false
|
||||||
}
|
}
|
||||||
|
backingField = FirDefaultPropertyBackingField(
|
||||||
|
moduleData = moduleData,
|
||||||
|
annotations = mutableListOf(),
|
||||||
|
returnTypeRef = returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
|
||||||
|
isVar = isVar,
|
||||||
|
propertySymbol = symbol,
|
||||||
|
status = status.copy(),
|
||||||
|
)
|
||||||
annotations += modifiers.annotations.filter {
|
annotations += modifiers.annotations.filter {
|
||||||
it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY ||
|
it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY ||
|
||||||
it.useSiteTarget == AnnotationUseSiteTarget.FIELD ||
|
it.useSiteTarget == AnnotationUseSiteTarget.FIELD ||
|
||||||
|
|||||||
@@ -601,6 +601,15 @@ open class RawFirBuilder(
|
|||||||
isVar = isMutable
|
isVar = isMutable
|
||||||
symbol = FirPropertySymbol(callableIdForName(propertyName))
|
symbol = FirPropertySymbol(callableIdForName(propertyName))
|
||||||
isLocal = false
|
isLocal = false
|
||||||
|
backingField = FirDefaultPropertyBackingField(
|
||||||
|
moduleData = baseModuleData,
|
||||||
|
annotations = mutableListOf(),
|
||||||
|
returnTypeRef = returnTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
|
||||||
|
isVar = isVar,
|
||||||
|
propertySymbol = symbol,
|
||||||
|
status = status.copy(),
|
||||||
|
)
|
||||||
|
|
||||||
this.status = status
|
this.status = status
|
||||||
val defaultAccessorSource = propertySource.fakeElement(KtFakeSourceElementKind.DefaultAccessor)
|
val defaultAccessorSource = propertySource.fakeElement(KtFakeSourceElementKind.DefaultAccessor)
|
||||||
getter = FirDefaultPropertyGetter(
|
getter = FirDefaultPropertyGetter(
|
||||||
|
|||||||
+1
@@ -127,6 +127,7 @@ open class FirTypeResolveTransformer(
|
|||||||
.transformAnnotations(this, data)
|
.transformAnnotations(this, data)
|
||||||
if (property.isFromVararg == true) {
|
if (property.isFromVararg == true) {
|
||||||
property.transformTypeToArrayType()
|
property.transformTypeToArrayType()
|
||||||
|
property.backingField?.transformTypeToArrayType()
|
||||||
setAccessorTypesByPropertyType(property)
|
setAccessorTypesByPropertyType(property)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,15 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.KtPsiSourceElement
|
import org.jetbrains.kotlin.KtPsiSourceElement
|
||||||
import org.jetbrains.kotlin.KtRealPsiSourceElement
|
import org.jetbrains.kotlin.KtRealPsiSourceElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fakeElement
|
import org.jetbrains.kotlin.fakeElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
import org.jetbrains.kotlin.fir.declarations.FirContextReceiver
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.references.FirReference
|
import org.jetbrains.kotlin.fir.references.FirReference
|
||||||
@@ -85,3 +91,54 @@ fun FirElement.renderWithType(): String =
|
|||||||
|
|
||||||
fun FirElement.render(): String =
|
fun FirElement.render(): String =
|
||||||
FirRenderer().renderElementAsString(this)
|
FirRenderer().renderElementAsString(this)
|
||||||
|
|
||||||
|
fun FirDeclarationStatus.copy(
|
||||||
|
visibility: Visibility? = this.visibility,
|
||||||
|
modality: Modality? = this.modality,
|
||||||
|
isExpect: Boolean = this.isExpect,
|
||||||
|
isActual: Boolean = this.isActual,
|
||||||
|
isOverride: Boolean = this.isOverride,
|
||||||
|
isOperator: Boolean = this.isOperator,
|
||||||
|
isInfix: Boolean = this.isInfix,
|
||||||
|
isInline: Boolean = this.isInline,
|
||||||
|
isTailRec: Boolean = this.isTailRec,
|
||||||
|
isExternal: Boolean = this.isExternal,
|
||||||
|
isConst: Boolean = this.isConst,
|
||||||
|
isLateInit: Boolean = this.isLateInit,
|
||||||
|
isInner: Boolean = this.isInner,
|
||||||
|
isCompanion: Boolean = this.isCompanion,
|
||||||
|
isData: Boolean = this.isData,
|
||||||
|
isSuspend: Boolean = this.isSuspend,
|
||||||
|
isStatic: Boolean = this.isStatic,
|
||||||
|
isFromSealedClass: Boolean = this.isFromSealedClass,
|
||||||
|
isFromEnumClass: Boolean = this.isFromEnumClass,
|
||||||
|
isFun: Boolean = this.isFun,
|
||||||
|
): FirDeclarationStatus {
|
||||||
|
val newVisibility = visibility ?: this.visibility
|
||||||
|
val newModality = modality ?: this.modality
|
||||||
|
val newStatus = if (this is FirResolvedDeclarationStatus) {
|
||||||
|
FirResolvedDeclarationStatusImpl(newVisibility, newModality!!, effectiveVisibility)
|
||||||
|
} else {
|
||||||
|
FirDeclarationStatusImpl(newVisibility, newModality)
|
||||||
|
}
|
||||||
|
return newStatus.apply {
|
||||||
|
this.isExpect = isExpect
|
||||||
|
this.isActual = isActual
|
||||||
|
this.isOverride = isOverride
|
||||||
|
this.isOperator = isOperator
|
||||||
|
this.isInfix = isInfix
|
||||||
|
this.isInline = isInline
|
||||||
|
this.isTailRec = isTailRec
|
||||||
|
this.isExternal = isExternal
|
||||||
|
this.isConst = isConst
|
||||||
|
this.isLateInit = isLateInit
|
||||||
|
this.isInner = isInner
|
||||||
|
this.isCompanion = isCompanion
|
||||||
|
this.isData = isData
|
||||||
|
this.isSuspend = isSuspend
|
||||||
|
this.isStatic = isStatic
|
||||||
|
this.isFromSealedClass = isFromSealedClass
|
||||||
|
this.isFromEnumClass = isFromEnumClass
|
||||||
|
this.isFun = isFun
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user