FIR2IR: convert annotations on delegated members
This commit is contained in:
committed by
teamcityserver
parent
d980074624
commit
eff4cec3e0
@@ -301,7 +301,6 @@ class Fir2IrConverter(
|
|||||||
components.fakeOverrideGenerator = fakeOverrideGenerator
|
components.fakeOverrideGenerator = fakeOverrideGenerator
|
||||||
val callGenerator = CallAndReferenceGenerator(components, fir2irVisitor, conversionScope)
|
val callGenerator = CallAndReferenceGenerator(components, fir2irVisitor, conversionScope)
|
||||||
components.callGenerator = callGenerator
|
components.callGenerator = callGenerator
|
||||||
declarationStorage.annotationGenerator = AnnotationGenerator(components)
|
|
||||||
for (firFile in firFiles) {
|
for (firFile in firFiles) {
|
||||||
converter.processClassHeaders(firFile)
|
converter.processClassHeaders(firFile)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
private val moduleDescriptor: FirModuleDescriptor
|
private val moduleDescriptor: FirModuleDescriptor
|
||||||
) : Fir2IrComponents by components {
|
) : Fir2IrComponents by components {
|
||||||
|
|
||||||
internal var annotationGenerator: AnnotationGenerator? = null
|
private val annotationGenerator = AnnotationGenerator(this)
|
||||||
|
|
||||||
private val firSymbolProvider = session.firSymbolProvider
|
private val firSymbolProvider = session.firSymbolProvider
|
||||||
|
|
||||||
|
|||||||
+11
-4
@@ -36,6 +36,8 @@ internal class DelegatedMemberGenerator(
|
|||||||
private val components: Fir2IrComponents
|
private val components: Fir2IrComponents
|
||||||
) : Fir2IrComponents by components {
|
) : Fir2IrComponents by components {
|
||||||
|
|
||||||
|
private val annotationGenerator = AnnotationGenerator(this)
|
||||||
|
|
||||||
// Generate delegated members for [subClass]. The synthetic field [irField] has the super interface type.
|
// Generate delegated members for [subClass]. The synthetic field [irField] has the super interface type.
|
||||||
fun generate(irField: IrField, firField: FirField, firSubClass: FirClass<*>, subClass: IrClass) {
|
fun generate(irField: IrField, firField: FirField, firSubClass: FirClass<*>, subClass: IrClass) {
|
||||||
val subClassLookupTag = firSubClass.symbol.toLookupTag()
|
val subClassLookupTag = firSubClass.symbol.toLookupTag()
|
||||||
@@ -76,11 +78,12 @@ internal class DelegatedMemberGenerator(
|
|||||||
val member = declarationStorage.getIrPropertySymbol(unwrapped.symbol).owner as? IrProperty
|
val member = declarationStorage.getIrPropertySymbol(unwrapped.symbol).owner as? IrProperty
|
||||||
?: return@processAllProperties
|
?: return@processAllProperties
|
||||||
|
|
||||||
val irSubFunction =
|
val irSubProperty = generateDelegatedProperty(
|
||||||
generateDelegatedProperty(subClass, firSubClass, irField, member, propertySymbol.fir)
|
subClass, firSubClass, irField, member, propertySymbol.fir
|
||||||
|
)
|
||||||
|
|
||||||
declarationStorage.cacheDelegatedProperty(propertySymbol.fir, irSubFunction)
|
declarationStorage.cacheDelegatedProperty(propertySymbol.fir, irSubProperty)
|
||||||
subClass.addMember(irSubFunction)
|
subClass.addMember(irSubProperty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,6 +138,7 @@ internal class DelegatedMemberGenerator(
|
|||||||
delegateFunction.overriddenSymbols =
|
delegateFunction.overriddenSymbols =
|
||||||
delegateOverride.generateOverriddenFunctionSymbols(firSubClass, session, scopeSession, declarationStorage)
|
delegateOverride.generateOverriddenFunctionSymbols(firSubClass, session, scopeSession, declarationStorage)
|
||||||
.filter { it.owner != delegateFunction }
|
.filter { it.owner != delegateFunction }
|
||||||
|
annotationGenerator.generate(delegateFunction, delegateOverride)
|
||||||
|
|
||||||
val body = createDelegateBody(irField, delegateFunction, superFunction)
|
val body = createDelegateBody(irField, delegateFunction, superFunction)
|
||||||
delegateFunction.body = body
|
delegateFunction.body = body
|
||||||
@@ -197,16 +201,19 @@ internal class DelegatedMemberGenerator(
|
|||||||
firDelegateProperty, subClass, origin = IrDeclarationOrigin.DELEGATED_MEMBER,
|
firDelegateProperty, subClass, origin = IrDeclarationOrigin.DELEGATED_MEMBER,
|
||||||
containingClass = firSubClass.symbol.toLookupTag()
|
containingClass = firSubClass.symbol.toLookupTag()
|
||||||
)
|
)
|
||||||
|
annotationGenerator.generate(delegateProperty, firDelegateProperty)
|
||||||
|
|
||||||
delegateProperty.getter!!.body = createDelegateBody(irField, delegateProperty.getter!!, superProperty.getter!!)
|
delegateProperty.getter!!.body = createDelegateBody(irField, delegateProperty.getter!!, superProperty.getter!!)
|
||||||
delegateProperty.getter!!.overriddenSymbols =
|
delegateProperty.getter!!.overriddenSymbols =
|
||||||
firDelegateProperty.generateOverriddenAccessorSymbols(firSubClass, isGetter = true, session, scopeSession, declarationStorage)
|
firDelegateProperty.generateOverriddenAccessorSymbols(firSubClass, isGetter = true, session, scopeSession, declarationStorage)
|
||||||
|
annotationGenerator.generate(delegateProperty.getter!!, firDelegateProperty)
|
||||||
if (delegateProperty.isVar) {
|
if (delegateProperty.isVar) {
|
||||||
delegateProperty.setter!!.body = createDelegateBody(irField, delegateProperty.setter!!, superProperty.setter!!)
|
delegateProperty.setter!!.body = createDelegateBody(irField, delegateProperty.setter!!, superProperty.setter!!)
|
||||||
delegateProperty.setter!!.overriddenSymbols =
|
delegateProperty.setter!!.overriddenSymbols =
|
||||||
firDelegateProperty.generateOverriddenAccessorSymbols(
|
firDelegateProperty.generateOverriddenAccessorSymbols(
|
||||||
firSubClass, isGetter = false, session, scopeSession, declarationStorage
|
firSubClass, isGetter = false, session, scopeSession, declarationStorage
|
||||||
)
|
)
|
||||||
|
annotationGenerator.generate(delegateProperty.setter!!, firDelegateProperty)
|
||||||
}
|
}
|
||||||
|
|
||||||
return delegateProperty
|
return delegateProperty
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
// !LANGUAGE: -DoNotGenerateThrowsForDelegatedKotlinMembers
|
// !LANGUAGE: -DoNotGenerateThrowsForDelegatedKotlinMembers
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|||||||
+4
@@ -51,6 +51,8 @@ FILE fqName:<root> fileName:/delegatedImplementationOfJavaInterface.kt
|
|||||||
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.takeFlexible' type=<root>.Test origin=null
|
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.takeFlexible' type=<root>.Test origin=null
|
||||||
x: GET_VAR 'x: kotlin.String? declared in <root>.Test.takeFlexible' type=kotlin.String? origin=null
|
x: GET_VAR 'x: kotlin.String? declared in <root>.Test.takeFlexible' type=kotlin.String? origin=null
|
||||||
FUN DELEGATED_MEMBER name:returnNotNull visibility:public modality:OPEN <> ($this:<root>.Test) returnType:@[EnhancedNullability] kotlin.String
|
FUN DELEGATED_MEMBER name:returnNotNull visibility:public modality:OPEN <> ($this:<root>.Test) returnType:@[EnhancedNullability] kotlin.String
|
||||||
|
annotations:
|
||||||
|
NotNull(value = <null>)
|
||||||
overridden:
|
overridden:
|
||||||
public abstract fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in <root>.J
|
public abstract fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in <root>.J
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Test
|
$this: VALUE_PARAMETER name:<this> type:<root>.Test
|
||||||
@@ -60,6 +62,8 @@ FILE fqName:<root> fileName:/delegatedImplementationOfJavaInterface.kt
|
|||||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.J visibility:local [final]' type=<root>.J origin=null
|
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.J visibility:local [final]' type=<root>.J origin=null
|
||||||
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.returnNotNull' type=<root>.Test origin=null
|
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.returnNotNull' type=<root>.Test origin=null
|
||||||
FUN DELEGATED_MEMBER name:returnNullable visibility:public modality:OPEN <> ($this:<root>.Test) returnType:@[FlexibleNullability] kotlin.String?
|
FUN DELEGATED_MEMBER name:returnNullable visibility:public modality:OPEN <> ($this:<root>.Test) returnType:@[FlexibleNullability] kotlin.String?
|
||||||
|
annotations:
|
||||||
|
Nullable(value = <null>)
|
||||||
overridden:
|
overridden:
|
||||||
public abstract fun returnNullable (): @[FlexibleNullability] kotlin.String? declared in <root>.J
|
public abstract fun returnNullable (): @[FlexibleNullability] kotlin.String? declared in <root>.J
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Test
|
$this: VALUE_PARAMETER name:<this> type:<root>.Test
|
||||||
|
|||||||
+8
@@ -63,6 +63,8 @@ FILE fqName:<root> fileName:/annotationsOnDelegatedMembers.kt
|
|||||||
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo' type=<root>.DFoo origin=null
|
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo' type=<root>.DFoo origin=null
|
||||||
value: GET_VAR 'd: <root>.IFoo declared in <root>.DFoo.<init>' type=<root>.IFoo origin=null
|
value: GET_VAR 'd: <root>.IFoo declared in <root>.DFoo.<init>' type=<root>.IFoo origin=null
|
||||||
FUN DELEGATED_MEMBER name:testFun visibility:public modality:OPEN <> ($this:<root>.DFoo) returnType:kotlin.Unit
|
FUN DELEGATED_MEMBER name:testFun visibility:public modality:OPEN <> ($this:<root>.DFoo) returnType:kotlin.Unit
|
||||||
|
annotations:
|
||||||
|
Ann
|
||||||
overridden:
|
overridden:
|
||||||
public abstract fun testFun (): kotlin.Unit declared in <root>.IFoo
|
public abstract fun testFun (): kotlin.Unit declared in <root>.IFoo
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.DFoo
|
$this: VALUE_PARAMETER name:<this> type:<root>.DFoo
|
||||||
@@ -71,6 +73,8 @@ FILE fqName:<root> fileName:/annotationsOnDelegatedMembers.kt
|
|||||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.IFoo visibility:local [final]' type=<root>.IFoo origin=null
|
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.IFoo visibility:local [final]' type=<root>.IFoo origin=null
|
||||||
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo.testFun' type=<root>.DFoo origin=null
|
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo.testFun' type=<root>.DFoo origin=null
|
||||||
FUN DELEGATED_MEMBER name:testExtFun visibility:public modality:OPEN <> ($this:<root>.DFoo, $receiver:kotlin.String) returnType:kotlin.Unit
|
FUN DELEGATED_MEMBER name:testExtFun visibility:public modality:OPEN <> ($this:<root>.DFoo, $receiver:kotlin.String) returnType:kotlin.Unit
|
||||||
|
annotations:
|
||||||
|
Ann
|
||||||
overridden:
|
overridden:
|
||||||
public abstract fun testExtFun (): kotlin.Unit declared in <root>.IFoo
|
public abstract fun testExtFun (): kotlin.Unit declared in <root>.IFoo
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.DFoo
|
$this: VALUE_PARAMETER name:<this> type:<root>.DFoo
|
||||||
@@ -81,6 +85,8 @@ FILE fqName:<root> fileName:/annotationsOnDelegatedMembers.kt
|
|||||||
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo.testExtFun' type=<root>.DFoo origin=null
|
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo.testExtFun' type=<root>.DFoo origin=null
|
||||||
$receiver: GET_VAR '<this>: kotlin.String declared in <root>.DFoo.testExtFun' type=kotlin.String origin=null
|
$receiver: GET_VAR '<this>: kotlin.String declared in <root>.DFoo.testExtFun' type=kotlin.String origin=null
|
||||||
PROPERTY DELEGATED_MEMBER name:testVal visibility:public modality:OPEN [val]
|
PROPERTY DELEGATED_MEMBER name:testVal visibility:public modality:OPEN [val]
|
||||||
|
annotations:
|
||||||
|
Ann
|
||||||
FUN DELEGATED_MEMBER name:<get-testVal> visibility:public modality:OPEN <> ($this:<root>.DFoo) returnType:kotlin.String
|
FUN DELEGATED_MEMBER name:<get-testVal> visibility:public modality:OPEN <> ($this:<root>.DFoo) returnType:kotlin.String
|
||||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:testVal visibility:public modality:OPEN [val]
|
correspondingProperty: PROPERTY DELEGATED_MEMBER name:testVal visibility:public modality:OPEN [val]
|
||||||
overridden:
|
overridden:
|
||||||
@@ -92,6 +98,8 @@ FILE fqName:<root> fileName:/annotationsOnDelegatedMembers.kt
|
|||||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.IFoo visibility:local [final]' type=<root>.IFoo origin=null
|
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.IFoo visibility:local [final]' type=<root>.IFoo origin=null
|
||||||
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo.<get-testVal>' type=<root>.DFoo origin=null
|
receiver: GET_VAR '<this>: <root>.DFoo declared in <root>.DFoo.<get-testVal>' type=<root>.DFoo origin=null
|
||||||
PROPERTY DELEGATED_MEMBER name:testExtVal visibility:public modality:OPEN [val]
|
PROPERTY DELEGATED_MEMBER name:testExtVal visibility:public modality:OPEN [val]
|
||||||
|
annotations:
|
||||||
|
Ann
|
||||||
FUN DELEGATED_MEMBER name:<get-testExtVal> visibility:public modality:OPEN <> ($this:<root>.DFoo, $receiver:kotlin.String) returnType:kotlin.String
|
FUN DELEGATED_MEMBER name:<get-testExtVal> visibility:public modality:OPEN <> ($this:<root>.DFoo, $receiver:kotlin.String) returnType:kotlin.String
|
||||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:testExtVal visibility:public modality:OPEN [val]
|
correspondingProperty: PROPERTY DELEGATED_MEMBER name:testExtVal visibility:public modality:OPEN [val]
|
||||||
overridden:
|
overridden:
|
||||||
|
|||||||
+4
@@ -44,6 +44,8 @@ FILE fqName:<root> fileName:/inheritingDeprecation.kt
|
|||||||
receiver: GET_VAR '<this>: <root>.Delegated declared in <root>.Delegated' type=<root>.Delegated origin=null
|
receiver: GET_VAR '<this>: <root>.Delegated declared in <root>.Delegated' type=<root>.Delegated origin=null
|
||||||
value: GET_VAR 'foo: <root>.IFoo declared in <root>.Delegated.<init>' type=<root>.IFoo origin=null
|
value: GET_VAR 'foo: <root>.IFoo declared in <root>.Delegated.<init>' type=<root>.IFoo origin=null
|
||||||
PROPERTY DELEGATED_MEMBER name:prop visibility:public modality:OPEN [val]
|
PROPERTY DELEGATED_MEMBER name:prop visibility:public modality:OPEN [val]
|
||||||
|
annotations:
|
||||||
|
Deprecated(message = '', replaceWith = <null>, level = <null>)
|
||||||
FUN DELEGATED_MEMBER name:<get-prop> visibility:public modality:OPEN <> ($this:<root>.Delegated) returnType:kotlin.String
|
FUN DELEGATED_MEMBER name:<get-prop> visibility:public modality:OPEN <> ($this:<root>.Delegated) returnType:kotlin.String
|
||||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:prop visibility:public modality:OPEN [val]
|
correspondingProperty: PROPERTY DELEGATED_MEMBER name:prop visibility:public modality:OPEN [val]
|
||||||
overridden:
|
overridden:
|
||||||
@@ -55,6 +57,8 @@ FILE fqName:<root> fileName:/inheritingDeprecation.kt
|
|||||||
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.IFoo visibility:local [final]' type=<root>.IFoo origin=null
|
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.IFoo visibility:local [final]' type=<root>.IFoo origin=null
|
||||||
receiver: GET_VAR '<this>: <root>.Delegated declared in <root>.Delegated.<get-prop>' type=<root>.Delegated origin=null
|
receiver: GET_VAR '<this>: <root>.Delegated declared in <root>.Delegated.<get-prop>' type=<root>.Delegated origin=null
|
||||||
PROPERTY DELEGATED_MEMBER name:extProp visibility:public modality:OPEN [val]
|
PROPERTY DELEGATED_MEMBER name:extProp visibility:public modality:OPEN [val]
|
||||||
|
annotations:
|
||||||
|
Deprecated(message = '', replaceWith = <null>, level = <null>)
|
||||||
FUN DELEGATED_MEMBER name:<get-extProp> visibility:public modality:OPEN <> ($this:<root>.Delegated, $receiver:kotlin.String) returnType:kotlin.String
|
FUN DELEGATED_MEMBER name:<get-extProp> visibility:public modality:OPEN <> ($this:<root>.Delegated, $receiver:kotlin.String) returnType:kotlin.String
|
||||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:extProp visibility:public modality:OPEN [val]
|
correspondingProperty: PROPERTY DELEGATED_MEMBER name:extProp visibility:public modality:OPEN [val]
|
||||||
overridden:
|
overridden:
|
||||||
|
|||||||
Reference in New Issue
Block a user