[FIR] LT builder: extract convertAnnotationList from convertModifierList
To simplify the logic around `convertModifierList` as a combination of annotations and modifiers doesn't work well ^KT-63042
This commit is contained in:
committed by
Space Team
parent
c5cba4c053
commit
5bd1a97632
+106
-57
@@ -242,23 +242,33 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
|
|
||||||
/***** MODIFIERS *****/
|
/***** MODIFIERS *****/
|
||||||
/**
|
/**
|
||||||
* @param skipAnnotations skip annotations as they are requiring correct [withContainerSymbol]
|
* Convert only modifiers
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseModifierList
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseModifierList
|
||||||
*/
|
*/
|
||||||
private fun convertModifierList(modifiers: LighterASTNode, isInClass: Boolean = false, skipAnnotations: Boolean = false): Modifier {
|
private fun convertModifierList(modifiers: LighterASTNode, isInClass: Boolean = false): Modifier {
|
||||||
val modifier = Modifier()
|
val modifier = Modifier()
|
||||||
modifiers.forEachChildren {
|
modifiers.forEachChildren {
|
||||||
val tokenType = it.tokenType
|
if (it.tokenType is KtModifierKeywordToken) {
|
||||||
when {
|
modifier.addModifier(it, isInClass)
|
||||||
tokenType is KtModifierKeywordToken -> modifier.addModifier(it, isInClass)
|
|
||||||
skipAnnotations -> {}
|
|
||||||
tokenType == ANNOTATION -> modifier.annotations += convertAnnotation(it)
|
|
||||||
tokenType == ANNOTATION_ENTRY -> modifier.annotations += convertAnnotationEntry(it)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return modifier
|
return modifier
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert only annotations
|
||||||
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseModifierList
|
||||||
|
*/
|
||||||
|
private fun convertAnnotationList(annotations: LighterASTNode): List<FirAnnotationCall> {
|
||||||
|
return annotations.forEachChildrenReturnList<FirAnnotationCall> { node, list ->
|
||||||
|
when (node.tokenType) {
|
||||||
|
ANNOTATION -> list += convertAnnotation(node)
|
||||||
|
ANNOTATION_ENTRY -> list += convertAnnotationEntry(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeModifierList
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeModifierList
|
||||||
*/
|
*/
|
||||||
@@ -317,12 +327,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
source = fileAnnotationList.toFirSourceElement()
|
source = fileAnnotationList.toFirSourceElement()
|
||||||
containingFileSymbol = fileSymbol
|
containingFileSymbol = fileSymbol
|
||||||
withContainerSymbol(fileSymbol) {
|
withContainerSymbol(fileSymbol) {
|
||||||
annotations += fileAnnotationList.forEachChildrenReturnList { node, container ->
|
annotations += convertAnnotationList(fileAnnotationList)
|
||||||
when (node.tokenType) {
|
|
||||||
ANNOTATION -> container += convertAnnotation(node)
|
|
||||||
ANNOTATION_ENTRY -> container += convertAnnotationEntry(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
annotations.ifEmpty {
|
annotations.ifEmpty {
|
||||||
@@ -435,12 +440,13 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
||||||
var primaryConstructor: LighterASTNode? = null
|
var primaryConstructor: LighterASTNode? = null
|
||||||
val typeConstraints = mutableListOf<TypeConstraint>()
|
val typeConstraints = mutableListOf<TypeConstraint>()
|
||||||
|
val classAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var classBody: LighterASTNode? = null
|
var classBody: LighterASTNode? = null
|
||||||
var superTypeList: LighterASTNode? = null
|
var superTypeList: LighterASTNode? = null
|
||||||
var typeParameterList: LighterASTNode? = null
|
var typeParameterList: LighterASTNode? = null
|
||||||
classNode.forEachChildren {
|
classNode.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it, isInClass = true, skipAnnotations = true)
|
MODIFIER_LIST -> modifiers = convertModifierList(it, isInClass = true)
|
||||||
IDENTIFIER -> identifier = it.asText
|
IDENTIFIER -> identifier = it.asText
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -457,7 +463,9 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
withContainerSymbol(classSymbol) {
|
withContainerSymbol(classSymbol) {
|
||||||
classNode.forEachChildren {
|
classNode.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it, isInClass = true)
|
MODIFIER_LIST -> {
|
||||||
|
classAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
CLASS_KEYWORD -> classKind = ClassKind.CLASS
|
CLASS_KEYWORD -> classKind = ClassKind.CLASS
|
||||||
INTERFACE_KEYWORD -> classKind = ClassKind.INTERFACE
|
INTERFACE_KEYWORD -> classKind = ClassKind.INTERFACE
|
||||||
OBJECT_KEYWORD -> classKind = ClassKind.OBJECT
|
OBJECT_KEYWORD -> classKind = ClassKind.OBJECT
|
||||||
@@ -506,7 +514,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
this.classKind = classKind
|
this.classKind = classKind
|
||||||
scopeProvider = baseScopeProvider
|
scopeProvider = baseScopeProvider
|
||||||
symbol = classSymbol
|
symbol = classSymbol
|
||||||
annotations += modifiers.annotations
|
annotations += classAnnotations
|
||||||
typeParameters += firTypeParameters
|
typeParameters += firTypeParameters
|
||||||
|
|
||||||
context.appendOuterTypeParameters(ignoreLastLevel = true, typeParameters)
|
context.appendOuterTypeParameters(ignoreLastLevel = true, typeParameters)
|
||||||
@@ -606,7 +614,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
createParameterTypeRefWithSourceKind = { property, kind -> property.returnTypeRef.copyWithNewSourceKind(kind) },
|
createParameterTypeRefWithSourceKind = { property, kind -> property.returnTypeRef.copyWithNewSourceKind(kind) },
|
||||||
addValueParameterAnnotations = { valueParam ->
|
addValueParameterAnnotations = { valueParam ->
|
||||||
valueParam.forEachChildren {
|
valueParam.forEachChildren {
|
||||||
if (it.tokenType == MODIFIER_LIST) convertModifierList(it).annotations.filterTo(annotations) {
|
if (it.tokenType == MODIFIER_LIST) convertAnnotationList(it).filterTo(annotations) {
|
||||||
it.useSiteTarget.appliesToPrimaryConstructorParameter()
|
it.useSiteTarget.appliesToPrimaryConstructorParameter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -674,6 +682,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
registerSelfType(delegatedSelfType)
|
registerSelfType(delegatedSelfType)
|
||||||
|
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val objectAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var primaryConstructor: LighterASTNode? = null
|
var primaryConstructor: LighterASTNode? = null
|
||||||
val superTypeRefs = mutableListOf<FirTypeRef>()
|
val superTypeRefs = mutableListOf<FirTypeRef>()
|
||||||
var delegatedSuperTypeRef: FirTypeRef? = null
|
var delegatedSuperTypeRef: FirTypeRef? = null
|
||||||
@@ -684,7 +693,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
|
|
||||||
objectDeclaration.forEachChildren {
|
objectDeclaration.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
objectAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
PRIMARY_CONSTRUCTOR -> primaryConstructor = it
|
PRIMARY_CONSTRUCTOR -> primaryConstructor = it
|
||||||
SUPER_TYPE_LIST -> convertDelegationSpecifiers(it).let { specifiers ->
|
SUPER_TYPE_LIST -> convertDelegationSpecifiers(it).let { specifiers ->
|
||||||
delegatedSuperTypeRef = specifiers.superTypeCalls.lastOrNull()?.delegatedSuperTypeRef
|
delegatedSuperTypeRef = specifiers.superTypeCalls.lastOrNull()?.delegatedSuperTypeRef
|
||||||
@@ -704,7 +716,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
}
|
}
|
||||||
val delegatedSuperType = delegatedSuperTypeRef ?: FirImplicitTypeRefImplWithoutSource
|
val delegatedSuperType = delegatedSuperTypeRef ?: FirImplicitTypeRefImplWithoutSource
|
||||||
|
|
||||||
annotations += modifiers.annotations
|
annotations += objectAnnotations
|
||||||
this.superTypeRefs += superTypeRefs
|
this.superTypeRefs += superTypeRefs
|
||||||
|
|
||||||
val classWrapper = ClassWrapper(
|
val classWrapper = ClassWrapper(
|
||||||
@@ -744,6 +756,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
*/
|
*/
|
||||||
private fun convertEnumEntry(enumEntry: LighterASTNode, classWrapper: ClassWrapper): FirEnumEntry {
|
private fun convertEnumEntry(enumEntry: LighterASTNode, classWrapper: ClassWrapper): FirEnumEntry {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val entryAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
lateinit var identifier: String
|
lateinit var identifier: String
|
||||||
val enumSuperTypeCallEntry = mutableListOf<FirExpression>()
|
val enumSuperTypeCallEntry = mutableListOf<FirExpression>()
|
||||||
var classBodyNode: LighterASTNode? = null
|
var classBodyNode: LighterASTNode? = null
|
||||||
@@ -759,7 +772,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
withContainerSymbol(symbol) {
|
withContainerSymbol(symbol) {
|
||||||
enumEntry.forEachChildren {
|
enumEntry.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
entryAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
INITIALIZER_LIST -> {
|
INITIALIZER_LIST -> {
|
||||||
enumSuperTypeCallEntry += convertInitializerList(it)
|
enumSuperTypeCallEntry += convertInitializerList(it)
|
||||||
it.getChildNodeByType(SUPER_TYPE_CALL_ENTRY)?.let { superTypeCall ->
|
it.getChildNodeByType(SUPER_TYPE_CALL_ENTRY)?.let { superTypeCall ->
|
||||||
@@ -780,11 +796,11 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
isExpect = containingClassIsExpectClass
|
isExpect = containingClassIsExpectClass
|
||||||
}
|
}
|
||||||
if (classWrapper.hasDefaultConstructor && enumEntry.getChildNodeByType(INITIALIZER_LIST) == null &&
|
if (classWrapper.hasDefaultConstructor && enumEntry.getChildNodeByType(INITIALIZER_LIST) == null &&
|
||||||
modifiers.annotations.isEmpty() && classBodyNode == null
|
entryAnnotations.isEmpty() && classBodyNode == null
|
||||||
) {
|
) {
|
||||||
return@buildEnumEntry
|
return@buildEnumEntry
|
||||||
}
|
}
|
||||||
annotations += modifiers.annotations
|
annotations += entryAnnotations
|
||||||
initializer = withChildClassName(enumEntryName, isExpect = false) {
|
initializer = withChildClassName(enumEntryName, isExpect = false) {
|
||||||
buildAnonymousObjectExpression {
|
buildAnonymousObjectExpression {
|
||||||
val entrySource = enumEntry.toFirSourceElement(KtFakeSourceElementKind.EnumInitializer)
|
val entrySource = enumEntry.toFirSourceElement(KtFakeSourceElementKind.EnumInitializer)
|
||||||
@@ -894,7 +910,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
diagnostic = ConeDanglingModifierOnTopLevel
|
diagnostic = ConeDanglingModifierOnTopLevel
|
||||||
symbol = FirDanglingModifierSymbol()
|
symbol = FirDanglingModifierSymbol()
|
||||||
withContainerSymbol(symbol) {
|
withContainerSymbol(symbol) {
|
||||||
annotations += convertModifierList(node).annotations
|
annotations += convertAnnotationList(node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -925,11 +941,15 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
val constructorSymbol = FirConstructorSymbol(callableIdForClassConstructor())
|
val constructorSymbol = FirConstructorSymbol(callableIdForClassConstructor())
|
||||||
withContainerSymbol(constructorSymbol) {
|
withContainerSymbol(constructorSymbol) {
|
||||||
var modifiersIfPresent: Modifier? = null
|
var modifiersIfPresent: Modifier? = null
|
||||||
|
val constructorAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
val valueParameters = mutableListOf<ValueParameter>()
|
val valueParameters = mutableListOf<ValueParameter>()
|
||||||
var hasConstructorKeyword = false
|
var hasConstructorKeyword = false
|
||||||
primaryConstructor?.forEachChildren {
|
primaryConstructor?.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiersIfPresent = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiersIfPresent = convertModifierList(it)
|
||||||
|
constructorAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
CONSTRUCTOR_KEYWORD -> hasConstructorKeyword = true
|
CONSTRUCTOR_KEYWORD -> hasConstructorKeyword = true
|
||||||
VALUE_PARAMETER_LIST -> valueParameters += convertValueParameters(
|
VALUE_PARAMETER_LIST -> valueParameters += convertValueParameters(
|
||||||
it,
|
it,
|
||||||
@@ -1012,7 +1032,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
dispatchReceiverType = classWrapper.obtainDispatchReceiverForConstructor()
|
dispatchReceiverType = classWrapper.obtainDispatchReceiverForConstructor()
|
||||||
this.status = status
|
this.status = status
|
||||||
symbol = constructorSymbol
|
symbol = constructorSymbol
|
||||||
annotations += modifiers.annotations
|
annotations += constructorAnnotations
|
||||||
typeParameters += constructorTypeParametersFromConstructedClass(classWrapper.classBuilder.typeParameters)
|
typeParameters += constructorTypeParametersFromConstructedClass(classWrapper.classBuilder.typeParameters)
|
||||||
this.valueParameters += valueParameters.map { it.firValueParameter }
|
this.valueParameters += valueParameters.map { it.firValueParameter }
|
||||||
delegatedConstructor = firDelegatedCall
|
delegatedConstructor = firDelegatedCall
|
||||||
@@ -1037,10 +1057,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
val initializerSymbol = FirAnonymousInitializerSymbol()
|
val initializerSymbol = FirAnonymousInitializerSymbol()
|
||||||
withContainerSymbol(initializerSymbol) {
|
withContainerSymbol(initializerSymbol) {
|
||||||
var firBlock: FirBlock? = null
|
var firBlock: FirBlock? = null
|
||||||
var modifiers = Modifier()
|
val initializerAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
anonymousInitializer.forEachChildren {
|
anonymousInitializer.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it, isInClass = true)
|
MODIFIER_LIST -> initializerAnnotations += convertAnnotationList(it)
|
||||||
BLOCK -> withForcedLocalContext {
|
BLOCK -> withForcedLocalContext {
|
||||||
firBlock = convertBlock(it)
|
firBlock = convertBlock(it)
|
||||||
}
|
}
|
||||||
@@ -1054,7 +1074,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Source
|
||||||
body = firBlock ?: buildEmptyExpressionBlock()
|
body = firBlock ?: buildEmptyExpressionBlock()
|
||||||
dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull()
|
dispatchReceiverType = context.dispatchReceiverTypesStack.lastOrNull()
|
||||||
annotations += modifiers.annotations
|
annotations += initializerAnnotations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1064,6 +1084,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
*/
|
*/
|
||||||
private fun convertSecondaryConstructor(secondaryConstructor: LighterASTNode, classWrapper: ClassWrapper): FirConstructor {
|
private fun convertSecondaryConstructor(secondaryConstructor: LighterASTNode, classWrapper: ClassWrapper): FirConstructor {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val constructorAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
val firValueParameters = mutableListOf<ValueParameter>()
|
val firValueParameters = mutableListOf<ValueParameter>()
|
||||||
var constructorDelegationCall: FirDelegatedConstructorCall? = null
|
var constructorDelegationCall: FirDelegatedConstructorCall? = null
|
||||||
var block: LighterASTNode? = null
|
var block: LighterASTNode? = null
|
||||||
@@ -1072,7 +1093,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
withContainerSymbol(constructorSymbol) {
|
withContainerSymbol(constructorSymbol) {
|
||||||
secondaryConstructor.forEachChildren {
|
secondaryConstructor.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
constructorAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
VALUE_PARAMETER_LIST -> firValueParameters += convertValueParameters(
|
VALUE_PARAMETER_LIST -> firValueParameters += convertValueParameters(
|
||||||
it,
|
it,
|
||||||
constructorSymbol,
|
constructorSymbol,
|
||||||
@@ -1106,7 +1130,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
delegatedConstructor = constructorDelegationCall
|
delegatedConstructor = constructorDelegationCall
|
||||||
|
|
||||||
context.firFunctionTargets += target
|
context.firFunctionTargets += target
|
||||||
annotations += modifiers.annotations
|
annotations += constructorAnnotations
|
||||||
typeParameters += constructorTypeParametersFromConstructedClass(classWrapper.classBuilder.typeParameters)
|
typeParameters += constructorTypeParametersFromConstructedClass(classWrapper.classBuilder.typeParameters)
|
||||||
valueParameters += firValueParameters.map { it.firValueParameter }
|
valueParameters += firValueParameters.map { it.firValueParameter }
|
||||||
val (body, contractDescription) = withForcedLocalContext {
|
val (body, contractDescription) = withForcedLocalContext {
|
||||||
@@ -1185,10 +1209,11 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
lateinit var firType: FirTypeRef
|
lateinit var firType: FirTypeRef
|
||||||
|
val aliasAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
|
|
||||||
typeAlias.forEachChildren {
|
typeAlias.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it, skipAnnotations = true)
|
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
||||||
IDENTIFIER -> identifier = it.asText
|
IDENTIFIER -> identifier = it.asText
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1200,7 +1225,9 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
withContainerSymbol(typeAliasSymbol) {
|
withContainerSymbol(typeAliasSymbol) {
|
||||||
typeAlias.forEachChildren {
|
typeAlias.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
aliasAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
TYPE_REFERENCE -> firType = convertType(it)
|
TYPE_REFERENCE -> firType = convertType(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1228,7 +1255,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
|
|
||||||
symbol = typeAliasSymbol
|
symbol = typeAliasSymbol
|
||||||
expandedTypeRef = firType
|
expandedTypeRef = firType
|
||||||
annotations += modifiers.annotations
|
annotations += aliasAnnotations
|
||||||
typeParameters += firTypeParameters
|
typeParameters += firTypeParameters
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1240,6 +1267,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
*/
|
*/
|
||||||
fun convertPropertyDeclaration(property: LighterASTNode, classWrapper: ClassWrapper? = null): FirDeclaration {
|
fun convertPropertyDeclaration(property: LighterASTNode, classWrapper: ClassWrapper? = null): FirDeclaration {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val propertyAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
val firTypeParameters = mutableListOf<FirTypeParameter>()
|
||||||
var isReturnType = false
|
var isReturnType = false
|
||||||
@@ -1269,7 +1297,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
val propertySource = property.toFirSourceElement()
|
val propertySource = property.toFirSourceElement()
|
||||||
property.forEachChildren {
|
property.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
propertyAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
TYPE_PARAMETER_LIST -> typeParameterList = it
|
TYPE_PARAMETER_LIST -> typeParameterList = it
|
||||||
COLON -> isReturnType = true
|
COLON -> isReturnType = true
|
||||||
TYPE_REFERENCE -> if (isReturnType) returnType = convertType(it) else receiverType = convertType(it)
|
TYPE_REFERENCE -> if (isReturnType) returnType = convertType(it) else receiverType = convertType(it)
|
||||||
@@ -1310,7 +1341,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
|
|
||||||
backingField = fieldDeclaration.convertBackingField(
|
backingField = fieldDeclaration.convertBackingField(
|
||||||
symbol, modifiers, returnType, isVar,
|
symbol, modifiers, returnType, isVar,
|
||||||
if (isLocal) emptyList() else modifiers.annotations.filter {
|
if (isLocal) emptyList() else propertyAnnotations.filter {
|
||||||
it.useSiteTarget == FIELD || it.useSiteTarget == PROPERTY_DELEGATE_FIELD
|
it.useSiteTarget == FIELD || it.useSiteTarget == PROPERTY_DELEGATE_FIELD
|
||||||
},
|
},
|
||||||
property,
|
property,
|
||||||
@@ -1360,7 +1391,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val convertedAccessors = accessors.map {
|
val convertedAccessors = accessors.map {
|
||||||
convertGetterOrSetter(it, returnType, propertyVisibility, symbol, modifiers)
|
convertGetterOrSetter(it, returnType, propertyVisibility, symbol, modifiers, propertyAnnotations)
|
||||||
}
|
}
|
||||||
this.getter = convertedAccessors.find { it.isGetter }
|
this.getter = convertedAccessors.find { it.isGetter }
|
||||||
?: FirDefaultPropertyGetter(
|
?: FirDefaultPropertyGetter(
|
||||||
@@ -1372,7 +1403,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
symbol,
|
symbol,
|
||||||
).also {
|
).also {
|
||||||
it.status = defaultAccessorStatus()
|
it.status = defaultAccessorStatus()
|
||||||
it.replaceAnnotations(modifiers.annotations.filterUseSiteTarget(PROPERTY_GETTER))
|
it.replaceAnnotations(propertyAnnotations.filterUseSiteTarget(PROPERTY_GETTER))
|
||||||
it.initContainingClassAttr()
|
it.initContainingClassAttr()
|
||||||
}
|
}
|
||||||
// NOTE: We still need the setter even for a val property so we can report errors (e.g., VAL_WITH_SETTER).
|
// NOTE: We still need the setter even for a val property so we can report errors (e.g., VAL_WITH_SETTER).
|
||||||
@@ -1385,10 +1416,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
returnType.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
|
returnType.copyWithNewSourceKind(KtFakeSourceElementKind.DefaultAccessor),
|
||||||
propertyVisibility,
|
propertyVisibility,
|
||||||
symbol,
|
symbol,
|
||||||
parameterAnnotations = modifiers.annotations.filterUseSiteTarget(SETTER_PARAMETER)
|
parameterAnnotations = propertyAnnotations.filterUseSiteTarget(SETTER_PARAMETER)
|
||||||
).also {
|
).also {
|
||||||
it.status = defaultAccessorStatus()
|
it.status = defaultAccessorStatus()
|
||||||
it.replaceAnnotations(modifiers.annotations.filterUseSiteTarget(PROPERTY_SETTER))
|
it.replaceAnnotations(propertyAnnotations.filterUseSiteTarget(PROPERTY_SETTER))
|
||||||
it.initContainingClassAttr()
|
it.initContainingClassAttr()
|
||||||
}
|
}
|
||||||
} else null
|
} else null
|
||||||
@@ -1411,7 +1442,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
annotations += if (isLocal) modifiers.annotations else modifiers.annotations.filter {
|
annotations += if (isLocal) propertyAnnotations else propertyAnnotations.filter {
|
||||||
it.useSiteTarget != FIELD && it.useSiteTarget != PROPERTY_DELEGATE_FIELD && it.useSiteTarget != PROPERTY_GETTER &&
|
it.useSiteTarget != FIELD && it.useSiteTarget != PROPERTY_DELEGATE_FIELD && it.useSiteTarget != PROPERTY_GETTER &&
|
||||||
(!isVar || it.useSiteTarget != SETTER_PARAMETER && it.useSiteTarget != PROPERTY_SETTER)
|
(!isVar || it.useSiteTarget != SETTER_PARAMETER && it.useSiteTarget != PROPERTY_SETTER)
|
||||||
}
|
}
|
||||||
@@ -1427,14 +1458,14 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitDestructuringDeclaration
|
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitDestructuringDeclaration
|
||||||
*/
|
*/
|
||||||
internal fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration {
|
internal fun convertDestructingDeclaration(destructingDeclaration: LighterASTNode): DestructuringDeclaration {
|
||||||
var modifiers = Modifier()
|
val annotations = mutableListOf<FirAnnotationCall>()
|
||||||
var isVar = false
|
var isVar = false
|
||||||
val entries = mutableListOf<DestructuringEntry>()
|
val entries = mutableListOf<DestructuringEntry>()
|
||||||
val source = destructingDeclaration.toFirSourceElement()
|
val source = destructingDeclaration.toFirSourceElement()
|
||||||
var firExpression: FirExpression? = null
|
var firExpression: FirExpression? = null
|
||||||
destructingDeclaration.forEachChildren {
|
destructingDeclaration.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> annotations += convertAnnotationList(it)
|
||||||
VAR_KEYWORD -> isVar = true
|
VAR_KEYWORD -> isVar = true
|
||||||
DESTRUCTURING_DECLARATION_ENTRY -> entries += convertDestructingDeclarationEntry(it)
|
DESTRUCTURING_DECLARATION_ENTRY -> entries += convertDestructingDeclarationEntry(it)
|
||||||
else -> if (it.isExpression()) firExpression =
|
else -> if (it.isExpression()) firExpression =
|
||||||
@@ -1450,7 +1481,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
ConeSyntaxDiagnostic("Initializer required for destructuring declaration")
|
ConeSyntaxDiagnostic("Initializer required for destructuring declaration")
|
||||||
),
|
),
|
||||||
source,
|
source,
|
||||||
modifiers.annotations
|
annotations
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1458,12 +1489,12 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMultiDeclarationName
|
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMultiDeclarationName
|
||||||
*/
|
*/
|
||||||
private fun convertDestructingDeclarationEntry(entry: LighterASTNode): DestructuringEntry {
|
private fun convertDestructingDeclarationEntry(entry: LighterASTNode): DestructuringEntry {
|
||||||
var modifiers = Modifier()
|
val annotations = mutableListOf<FirAnnotationCall>()
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
var firType: FirTypeRef? = null
|
var firType: FirTypeRef? = null
|
||||||
entry.forEachChildren {
|
entry.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> annotations += convertAnnotationList(it)
|
||||||
IDENTIFIER -> identifier = it.asText
|
IDENTIFIER -> identifier = it.asText
|
||||||
TYPE_REFERENCE -> firType = convertType(it)
|
TYPE_REFERENCE -> firType = convertType(it)
|
||||||
}
|
}
|
||||||
@@ -1479,7 +1510,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
source = entry.toFirSourceElement(),
|
source = entry.toFirSourceElement(),
|
||||||
returnTypeRef = firType ?: implicitType,
|
returnTypeRef = firType ?: implicitType,
|
||||||
name = name,
|
name = name,
|
||||||
annotations = modifiers.annotations,
|
annotations = annotations,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1492,8 +1523,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
propertyVisibility: Visibility,
|
propertyVisibility: Visibility,
|
||||||
propertySymbol: FirPropertySymbol,
|
propertySymbol: FirPropertySymbol,
|
||||||
propertyModifiers: Modifier,
|
propertyModifiers: Modifier,
|
||||||
|
propertyAnnotations: List<FirAnnotationCall>,
|
||||||
): FirPropertyAccessor {
|
): FirPropertyAccessor {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val accessorAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var isGetter = true
|
var isGetter = true
|
||||||
var returnType: FirTypeRef? = null
|
var returnType: FirTypeRef? = null
|
||||||
val propertyTypeRefToUse = propertyTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.ImplicitTypeRef)
|
val propertyTypeRefToUse = propertyTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.ImplicitTypeRef)
|
||||||
@@ -1514,10 +1547,13 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
if (it.asText == "set") isGetter = false
|
if (it.asText == "set") isGetter = false
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
SET_KEYWORD -> isGetter = false
|
SET_KEYWORD -> isGetter = false
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
accessorAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
TYPE_REFERENCE -> returnType = convertType(it)
|
TYPE_REFERENCE -> returnType = convertType(it)
|
||||||
VALUE_PARAMETER_LIST -> firValueParameters = convertSetterParameter(
|
VALUE_PARAMETER_LIST -> firValueParameters = convertSetterParameter(
|
||||||
it, accessorSymbol, propertyTypeRefToUse, propertyModifiers.annotations.filterUseSiteTarget(SETTER_PARAMETER)
|
it, accessorSymbol, propertyTypeRefToUse, propertyAnnotations.filterUseSiteTarget(SETTER_PARAMETER)
|
||||||
)
|
)
|
||||||
CONTRACT_EFFECT_LIST -> outerContractDescription = obtainContractDescription(it)
|
CONTRACT_EFFECT_LIST -> outerContractDescription = obtainContractDescription(it)
|
||||||
BLOCK -> block = it
|
BLOCK -> block = it
|
||||||
@@ -1536,7 +1572,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
isExternal = propertyModifiers.hasExternal() || modifiers.hasExternal()
|
||||||
}
|
}
|
||||||
val sourceElement = getterOrSetter.toFirSourceElement()
|
val sourceElement = getterOrSetter.toFirSourceElement()
|
||||||
val accessorAdditionalAnnotations = propertyModifiers.annotations.filterUseSiteTarget(
|
val accessorAdditionalAnnotations = propertyAnnotations.filterUseSiteTarget(
|
||||||
if (isGetter) PROPERTY_GETTER
|
if (isGetter) PROPERTY_GETTER
|
||||||
else PROPERTY_SETTER
|
else PROPERTY_SETTER
|
||||||
)
|
)
|
||||||
@@ -1552,7 +1588,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
isGetter
|
isGetter
|
||||||
)
|
)
|
||||||
.also { accessor ->
|
.also { accessor ->
|
||||||
accessor.replaceAnnotations(modifiers.annotations + accessorAdditionalAnnotations)
|
accessor.replaceAnnotations(accessorAnnotations + accessorAdditionalAnnotations)
|
||||||
accessor.status = status
|
accessor.status = status
|
||||||
accessor.initContainingClassAttr()
|
accessor.initContainingClassAttr()
|
||||||
}
|
}
|
||||||
@@ -1568,7 +1604,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
this.status = status
|
this.status = status
|
||||||
context.firFunctionTargets += target
|
context.firFunctionTargets += target
|
||||||
annotations += accessorAdditionalAnnotations
|
annotations += accessorAdditionalAnnotations
|
||||||
annotations += modifiers.annotations
|
annotations += accessorAnnotations
|
||||||
|
|
||||||
if (!isGetter) {
|
if (!isGetter) {
|
||||||
valueParameters += firValueParameters
|
valueParameters += firValueParameters
|
||||||
@@ -1602,11 +1638,15 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
property: LighterASTNode,
|
property: LighterASTNode,
|
||||||
): FirBackingField {
|
): FirBackingField {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val fieldAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var returnType: FirTypeRef = implicitType
|
var returnType: FirTypeRef = implicitType
|
||||||
var backingFieldInitializer: FirExpression? = null
|
var backingFieldInitializer: FirExpression? = null
|
||||||
this?.forEachChildren {
|
this?.forEachChildren {
|
||||||
when {
|
when {
|
||||||
it.tokenType == MODIFIER_LIST -> modifiers = convertModifierList(it)
|
it.tokenType == MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
fieldAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
it.tokenType == TYPE_REFERENCE -> returnType = convertType(it)
|
it.tokenType == TYPE_REFERENCE -> returnType = convertType(it)
|
||||||
it.isExpression() -> {
|
it.isExpression() -> {
|
||||||
backingFieldInitializer = expressionConverter.getAsFirExpression(it, "Should have initializer")
|
backingFieldInitializer = expressionConverter.getAsFirExpression(it, "Should have initializer")
|
||||||
@@ -1628,7 +1668,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
name = StandardNames.BACKING_FIELD
|
name = StandardNames.BACKING_FIELD
|
||||||
symbol = FirBackingFieldSymbol(CallableId(name))
|
symbol = FirBackingFieldSymbol(CallableId(name))
|
||||||
this.status = status
|
this.status = status
|
||||||
annotations += modifiers.annotations
|
annotations += fieldAnnotations
|
||||||
annotations += annotationsFromProperty
|
annotations += annotationsFromProperty
|
||||||
this.propertySymbol = propertySymbol
|
this.propertySymbol = propertySymbol
|
||||||
this.initializer = backingFieldInitializer
|
this.initializer = backingFieldInitializer
|
||||||
@@ -1731,6 +1771,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
*/
|
*/
|
||||||
fun convertFunctionDeclaration(functionDeclaration: LighterASTNode): FirStatement {
|
fun convertFunctionDeclaration(functionDeclaration: LighterASTNode): FirStatement {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val functionAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
var valueParametersList: LighterASTNode? = null
|
var valueParametersList: LighterASTNode? = null
|
||||||
var isReturnType = false
|
var isReturnType = false
|
||||||
@@ -1761,7 +1802,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
val target: FirFunctionTarget
|
val target: FirFunctionTarget
|
||||||
functionDeclaration.forEachChildren {
|
functionDeclaration.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
functionAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
TYPE_PARAMETER_LIST -> typeParameterList = it
|
TYPE_PARAMETER_LIST -> typeParameterList = it
|
||||||
VALUE_PARAMETER_LIST -> valueParametersList = it //must convert later, because it can contains "return"
|
VALUE_PARAMETER_LIST -> valueParametersList = it //must convert later, because it can contains "return"
|
||||||
COLON -> isReturnType = true
|
COLON -> isReturnType = true
|
||||||
@@ -1832,7 +1876,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
returnTypeRef = returnType!!
|
returnTypeRef = returnType!!
|
||||||
|
|
||||||
context.firFunctionTargets += target
|
context.firFunctionTargets += target
|
||||||
annotations += modifiers.annotations
|
annotations += functionAnnotations
|
||||||
|
|
||||||
val actualTypeParameters = if (this is FirSimpleFunctionBuilder) {
|
val actualTypeParameters = if (this is FirSimpleFunctionBuilder) {
|
||||||
typeParameters += firTypeParameters
|
typeParameters += firTypeParameters
|
||||||
@@ -2439,6 +2483,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
additionalAnnotations: List<FirAnnotation> = emptyList()
|
additionalAnnotations: List<FirAnnotation> = emptyList()
|
||||||
): ValueParameter {
|
): ValueParameter {
|
||||||
var modifiers = Modifier()
|
var modifiers = Modifier()
|
||||||
|
val valueAnnotations = mutableListOf<FirAnnotationCall>()
|
||||||
var isVal = false
|
var isVal = false
|
||||||
var isVar = false
|
var isVar = false
|
||||||
var identifier: String? = null
|
var identifier: String? = null
|
||||||
@@ -2447,7 +2492,10 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
var destructuringDeclaration: DestructuringDeclaration? = null
|
var destructuringDeclaration: DestructuringDeclaration? = null
|
||||||
valueParameter.forEachChildren {
|
valueParameter.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
MODIFIER_LIST -> modifiers = convertModifierList(it)
|
MODIFIER_LIST -> {
|
||||||
|
modifiers = convertModifierList(it)
|
||||||
|
valueAnnotations += convertAnnotationList(it)
|
||||||
|
}
|
||||||
VAL_KEYWORD -> isVal = true
|
VAL_KEYWORD -> isVal = true
|
||||||
VAR_KEYWORD -> isVar = true
|
VAR_KEYWORD -> isVar = true
|
||||||
IDENTIFIER -> identifier = it.asText
|
IDENTIFIER -> identifier = it.asText
|
||||||
@@ -2464,6 +2512,7 @@ class LightTreeRawFirDeclarationBuilder(
|
|||||||
isVal = isVal,
|
isVal = isVal,
|
||||||
isVar = isVar,
|
isVar = isVar,
|
||||||
modifiers = modifiers,
|
modifiers = modifiers,
|
||||||
|
valueParameterAnnotations = valueAnnotations,
|
||||||
returnTypeRef = firType
|
returnTypeRef = firType
|
||||||
?: when {
|
?: when {
|
||||||
valueParameterDeclaration.shouldExplicitParameterTypeBePresent -> createNoTypeForParameterTypeRef(valueParameterSource)
|
valueParameterDeclaration.shouldExplicitParameterTypeBePresent -> createNoTypeForParameterTypeRef(valueParameterSource)
|
||||||
|
|||||||
+5
-3
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.isFromVararg
|
import org.jetbrains.kotlin.fir.declarations.utils.isFromVararg
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSyntaxDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeSyntaxDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCallCopy
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCallCopy
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
|
||||||
@@ -51,6 +52,7 @@ class ValueParameter(
|
|||||||
private val isVal: Boolean,
|
private val isVal: Boolean,
|
||||||
private val isVar: Boolean,
|
private val isVar: Boolean,
|
||||||
private val modifiers: Modifier,
|
private val modifiers: Modifier,
|
||||||
|
private val valueParameterAnnotations: List<FirAnnotationCall>,
|
||||||
val returnTypeRef: FirTypeRef,
|
val returnTypeRef: FirTypeRef,
|
||||||
val source: KtSourceElement,
|
val source: KtSourceElement,
|
||||||
private val moduleData: FirModuleData,
|
private val moduleData: FirModuleData,
|
||||||
@@ -68,9 +70,9 @@ class ValueParameter(
|
|||||||
val annotations: List<FirAnnotation> by lazy(LazyThreadSafetyMode.NONE) {
|
val annotations: List<FirAnnotation> by lazy(LazyThreadSafetyMode.NONE) {
|
||||||
buildList {
|
buildList {
|
||||||
if (!isFromPrimaryConstructor)
|
if (!isFromPrimaryConstructor)
|
||||||
addAll(modifiers.annotations)
|
addAll(valueParameterAnnotations)
|
||||||
else
|
else
|
||||||
modifiers.annotations.filterTo(this) { it.useSiteTarget.appliesToPrimaryConstructorParameter() }
|
valueParameterAnnotations.filterTo(this) { it.useSiteTarget.appliesToPrimaryConstructorParameter() }
|
||||||
addAll(additionalAnnotations)
|
addAll(additionalAnnotations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,7 +134,7 @@ class ValueParameter(
|
|||||||
|
|
||||||
isVar = this@ValueParameter.isVar
|
isVar = this@ValueParameter.isVar
|
||||||
val propertySymbol = FirPropertySymbol(callableId)
|
val propertySymbol = FirPropertySymbol(callableId)
|
||||||
val remappedAnnotations = modifiers.annotations.map {
|
val remappedAnnotations = valueParameterAnnotations.map {
|
||||||
buildAnnotationCallCopy(it) {
|
buildAnnotationCallCopy(it) {
|
||||||
containingDeclarationSymbol = propertySymbol
|
containingDeclarationSymbol = propertySymbol
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user