IR: IrField.isFinal

This commit is contained in:
Dmitry Petrov
2018-05-04 17:36:05 +03:00
parent 9721ca8d09
commit 9717345e3b
121 changed files with 470 additions and 456 deletions
@@ -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 {