[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 {
|
||||
it.useSiteTarget != FIELD && it.useSiteTarget != PROPERTY_DELEGATE_FIELD && it.useSiteTarget != PROPERTY_GETTER &&
|
||||
(!isVar || it.useSiteTarget != SETTER_PARAMETER && it.useSiteTarget != PROPERTY_SETTER)
|
||||
annotations += when {
|
||||
isLocal -> propertyAnnotations
|
||||
else -> propertyAnnotations.filterStandalonePropertyRelevantAnnotations(isVar)
|
||||
}
|
||||
|
||||
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.fakeElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.builder.Context
|
||||
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.builder.*
|
||||
import org.jetbrains.kotlin.fir.copy
|
||||
import org.jetbrains.kotlin.fir.copyWithNewSourceKind
|
||||
import org.jetbrains.kotlin.fir.correspondingProperty
|
||||
@@ -166,9 +162,7 @@ class ValueParameter(
|
||||
status = status.copy(isLateInit = false),
|
||||
)
|
||||
|
||||
annotations += remappedAnnotations.filter {
|
||||
it.useSiteTarget == null || it.useSiteTarget == PROPERTY
|
||||
}
|
||||
annotations += remappedAnnotations.filterConstructorPropertyRelevantAnnotations(this.isVar)
|
||||
|
||||
getter = FirDefaultPropertyGetter(
|
||||
defaultAccessorSource,
|
||||
|
||||
+4
-6
@@ -782,9 +782,7 @@ open class PsiRawFirBuilder(
|
||||
setter.initContainingClassAttr()
|
||||
setter.replaceAnnotations(parameterAnnotations.filterUseSiteTarget(PROPERTY_SETTER))
|
||||
} else null
|
||||
annotations += parameterAnnotations.filter {
|
||||
it.useSiteTarget == null || it.useSiteTarget == PROPERTY
|
||||
}
|
||||
annotations += parameterAnnotations.filterConstructorPropertyRelevantAnnotations(isMutable)
|
||||
|
||||
dispatchReceiverType = currentDispatchReceiverType()
|
||||
}.apply {
|
||||
@@ -2197,9 +2195,9 @@ open class PsiRawFirBuilder(
|
||||
}
|
||||
}
|
||||
}
|
||||
annotations += if (isLocal) propertyAnnotations else propertyAnnotations.filter {
|
||||
it.useSiteTarget != FIELD && it.useSiteTarget != PROPERTY_DELEGATE_FIELD && it.useSiteTarget != PROPERTY_GETTER &&
|
||||
(!isVar || it.useSiteTarget != SETTER_PARAMETER && it.useSiteTarget != PROPERTY_SETTER)
|
||||
annotations += when {
|
||||
isLocal -> propertyAnnotations
|
||||
else -> propertyAnnotations.filterStandalonePropertyRelevantAnnotations(isVar)
|
||||
}
|
||||
|
||||
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.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
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.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
||||
package second
|
||||
|
||||
Reference in New Issue
Block a user