IR: IrField.isFinal
This commit is contained in:
@@ -21,5 +21,6 @@ interface IrField : IrSymbolDeclaration<IrFieldSymbol> {
|
||||
val name: Name
|
||||
val type: KotlinType
|
||||
val visibility: Visibility
|
||||
val isFinal: Boolean
|
||||
var initializer: IrExpressionBody?
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
@@ -36,12 +37,21 @@ class IrFieldImpl(
|
||||
override val symbol: IrFieldSymbol,
|
||||
override val name: Name,
|
||||
override val type: KotlinType,
|
||||
override val visibility: Visibility
|
||||
override val visibility: Visibility,
|
||||
override val isFinal: Boolean
|
||||
) : IrDeclarationBase(startOffset, endOffset, origin), IrField {
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrFieldSymbol, isFinal: Boolean) :
|
||||
this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.visibility,
|
||||
isFinal
|
||||
)
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, symbol: IrFieldSymbol) :
|
||||
this(
|
||||
startOffset, endOffset, origin, symbol,
|
||||
symbol.descriptor.name, symbol.descriptor.type, symbol.descriptor.visibility
|
||||
symbol.descriptor.modality == Modality.FINAL
|
||||
)
|
||||
|
||||
constructor(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor) :
|
||||
|
||||
@@ -104,7 +104,11 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
|
||||
override fun visitField(declaration: IrField, data: Nothing?): String =
|
||||
"FIELD ${declaration.renderOriginIfNonTrivial()}" +
|
||||
"name:${declaration.name} type:${declaration.type.render()} visibility:${declaration.visibility}"
|
||||
"name:${declaration.name} type:${declaration.type.render()} visibility:${declaration.visibility} " +
|
||||
"flags:${declaration.renderFieldFlags()}"
|
||||
|
||||
private fun IrField.renderFieldFlags() =
|
||||
if (isFinal) "final" else ""
|
||||
|
||||
override fun visitClass(declaration: IrClass, data: Nothing?): String =
|
||||
declaration.run {
|
||||
|
||||
Reference in New Issue
Block a user