[FIR] Don't miss annotations on properties from primary constructors
^KT-64609 Fixed
This commit is contained in:
committed by
Space Team
parent
1f46aed3e0
commit
9c0ac27307
+3
-3
@@ -1446,9 +1446,9 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
annotations += if (isLocal) propertyAnnotations else propertyAnnotations.filter {
|
annotations += when {
|
||||||
it.useSiteTarget != FIELD && it.useSiteTarget != PROPERTY_DELEGATE_FIELD && it.useSiteTarget != PROPERTY_GETTER &&
|
isLocal -> propertyAnnotations
|
||||||
(!isVar || it.useSiteTarget != SETTER_PARAMETER && it.useSiteTarget != PROPERTY_SETTER)
|
else -> propertyAnnotations.filterStandalonePropertyRelevantAnnotations(isVar)
|
||||||
}
|
}
|
||||||
|
|
||||||
contextReceivers.addAll(convertContextReceivers(property))
|
contextReceivers.addAll(convertContextReceivers(property))
|
||||||
|
|||||||
+2
-8
@@ -10,11 +10,7 @@ import org.jetbrains.kotlin.KtSourceElement
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.*
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.*
|
||||||
import org.jetbrains.kotlin.fakeElement
|
import org.jetbrains.kotlin.fakeElement
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
import org.jetbrains.kotlin.fir.builder.Context
|
import org.jetbrains.kotlin.fir.builder.*
|
||||||
import org.jetbrains.kotlin.fir.builder.appliesToPrimaryConstructorParameter
|
|
||||||
import org.jetbrains.kotlin.fir.builder.filterUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.fir.builder.initContainingClassAttr
|
|
||||||
import org.jetbrains.kotlin.fir.builder.wrapIntoArray
|
|
||||||
import org.jetbrains.kotlin.fir.copy
|
import org.jetbrains.kotlin.fir.copy
|
||||||
import org.jetbrains.kotlin.fir.copyWithNewSourceKind
|
import org.jetbrains.kotlin.fir.copyWithNewSourceKind
|
||||||
import org.jetbrains.kotlin.fir.correspondingProperty
|
import org.jetbrains.kotlin.fir.correspondingProperty
|
||||||
@@ -166,9 +162,7 @@ class ValueParameter(
|
|||||||
status = status.copy(isLateInit = false),
|
status = status.copy(isLateInit = false),
|
||||||
)
|
)
|
||||||
|
|
||||||
annotations += remappedAnnotations.filter {
|
annotations += remappedAnnotations.filterConstructorPropertyRelevantAnnotations(this.isVar)
|
||||||
it.useSiteTarget == null || it.useSiteTarget == PROPERTY
|
|
||||||
}
|
|
||||||
|
|
||||||
getter = FirDefaultPropertyGetter(
|
getter = FirDefaultPropertyGetter(
|
||||||
defaultAccessorSource,
|
defaultAccessorSource,
|
||||||
|
|||||||
+4
-6
@@ -782,9 +782,7 @@ open class PsiRawFirBuilder(
|
|||||||
setter.initContainingClassAttr()
|
setter.initContainingClassAttr()
|
||||||
setter.replaceAnnotations(parameterAnnotations.filterUseSiteTarget(PROPERTY_SETTER))
|
setter.replaceAnnotations(parameterAnnotations.filterUseSiteTarget(PROPERTY_SETTER))
|
||||||
} else null
|
} else null
|
||||||
annotations += parameterAnnotations.filter {
|
annotations += parameterAnnotations.filterConstructorPropertyRelevantAnnotations(isMutable)
|
||||||
it.useSiteTarget == null || it.useSiteTarget == PROPERTY
|
|
||||||
}
|
|
||||||
|
|
||||||
dispatchReceiverType = currentDispatchReceiverType()
|
dispatchReceiverType = currentDispatchReceiverType()
|
||||||
}.apply {
|
}.apply {
|
||||||
@@ -2197,9 +2195,9 @@ open class PsiRawFirBuilder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
annotations += if (isLocal) propertyAnnotations else propertyAnnotations.filter {
|
annotations += when {
|
||||||
it.useSiteTarget != FIELD && it.useSiteTarget != PROPERTY_DELEGATE_FIELD && it.useSiteTarget != PROPERTY_GETTER &&
|
isLocal -> propertyAnnotations
|
||||||
(!isVar || it.useSiteTarget != SETTER_PARAMETER && it.useSiteTarget != PROPERTY_SETTER)
|
else -> propertyAnnotations.filterStandalonePropertyRelevantAnnotations(isVar)
|
||||||
}
|
}
|
||||||
|
|
||||||
contextReceivers.addAll(convertContextReceivers(this@toFirProperty.contextReceivers))
|
contextReceivers.addAll(convertContextReceivers(this@toFirProperty.contextReceivers))
|
||||||
|
|||||||
+16
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.*
|
import org.jetbrains.kotlin.fir.declarations.builder.*
|
||||||
@@ -1203,3 +1204,18 @@ fun <TBase, TSource : TBase, TParameter : TBase> FirRegularClassBuilder.createDa
|
|||||||
// Refer to FIR backend ClassMemberGenerator for body generation.
|
// Refer to FIR backend ClassMemberGenerator for body generation.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Not the same as [filterStandalonePropertyRelevantAnnotations], because on
|
||||||
|
* primary constructor value parameters annotations should go to the
|
||||||
|
* [FirValueParameter] first.
|
||||||
|
*/
|
||||||
|
fun List<FirAnnotationCall>.filterConstructorPropertyRelevantAnnotations(isVar: Boolean) = filter {
|
||||||
|
it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY
|
||||||
|
|| !isVar && (it.useSiteTarget == AnnotationUseSiteTarget.SETTER_PARAMETER || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_SETTER)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun List<FirAnnotationCall>.filterStandalonePropertyRelevantAnnotations(isVar: Boolean) = filter {
|
||||||
|
it.useSiteTarget != AnnotationUseSiteTarget.FIELD && it.useSiteTarget != AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD && it.useSiteTarget != AnnotationUseSiteTarget.PROPERTY_GETTER &&
|
||||||
|
(!isVar || it.useSiteTarget != AnnotationUseSiteTarget.SETTER_PARAMETER && it.useSiteTarget != AnnotationUseSiteTarget.PROPERTY_SETTER)
|
||||||
|
}
|
||||||
|
|||||||
Vendored
-19
@@ -1,19 +0,0 @@
|
|||||||
// ISSUE: KT-64609
|
|
||||||
|
|
||||||
package second
|
|
||||||
|
|
||||||
annotation class Anno
|
|
||||||
|
|
||||||
class SimpleVarClass(
|
|
||||||
@Anno
|
|
||||||
@get:Anno
|
|
||||||
@set:Anno
|
|
||||||
@setparam:Anno
|
|
||||||
val constructorVariableWithAnnotations: Long,
|
|
||||||
) {
|
|
||||||
@Anno
|
|
||||||
@get:Anno
|
|
||||||
<!INAPPLICABLE_TARGET_PROPERTY_IMMUTABLE!>@set:Anno<!>
|
|
||||||
<!INAPPLICABLE_TARGET_PROPERTY_IMMUTABLE!>@setparam:Anno<!>
|
|
||||||
val memberVariableWithAnnotations: Long = 0L
|
|
||||||
}
|
|
||||||
Vendored
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// ISSUE: KT-64609
|
// ISSUE: KT-64609
|
||||||
|
|
||||||
package second
|
package second
|
||||||
|
|||||||
Reference in New Issue
Block a user