From 6589fbbfbb929e85921cbc0ce3733dae32710e58 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 20 May 2019 16:39:44 +0300 Subject: [PATCH] Raw FIR: set val setter to null instead of default one --- .../dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt | 2 +- .../src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt | 2 +- .../src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt | 4 ++-- .../kotlin/fir/deserialization/FirMemberDeserializer.kt | 7 +++++-- .../resolve/transformers/FirStatusResolveTransformer.kt | 2 +- .../fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt | 4 ++-- .../org/jetbrains/kotlin/fir/declarations/FirProperty.kt | 4 ++-- .../kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt | 4 ++-- 8 files changed, 16 insertions(+), 13 deletions(-) diff --git a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt index b96eb2ba4cb..1f2476c869d 100644 --- a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt +++ b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt @@ -849,7 +849,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver withIdentLevel { generate(property.getter) - generate(property.setter) + property.setter?.let { generate(it) } } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index b68c8bff328..7a162bf9b2c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -497,7 +497,7 @@ internal class Fir2IrVisitor( } getter = property.getter.accept(this@Fir2IrVisitor, type) as IrSimpleFunction if (property.isVar) { - setter = property.setter.accept(this@Fir2IrVisitor, type) as IrSimpleFunction + setter = property.setter!!.accept(this@Fir2IrVisitor, type) as IrSimpleFunction } property.annotations.forEach { annotations += it.accept(this@Fir2IrVisitor, null) as IrConstructorCall diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 3f781b412c3..73c6ef5f973 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -281,7 +281,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { ) }, getter = FirDefaultPropertyGetter(session, this, type, visibility), - setter = FirDefaultPropertySetter(session, this, type, visibility), + setter = if (isMutable) FirDefaultPropertySetter(session, this, type, visibility) else null, delegate = null ) extractAnnotationsTo(firProperty) @@ -796,7 +796,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { isVar, initializer, property.getter.toFirPropertyAccessor(property, propertyType, isGetter = true), - property.setter.toFirPropertyAccessor(property, propertyType, isGetter = false), + if (isVar) property.setter.toFirPropertyAccessor(property, propertyType, isGetter = false) else null, if (property.hasDelegate()) { { property.delegate?.expression }.toFirExpression("Should have delegate") } else null diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 68f38d992e1..d83cd45511a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -159,6 +159,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else flags val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else flags + val isVar = Flags.IS_VAR.get(flags) return FirMemberPropertyImpl( c.session, @@ -174,10 +175,12 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { isLateInit = Flags.IS_LATEINIT.get(flags), receiverTypeRef = proto.receiverType(c.typeTable)?.toTypeRef(local), returnTypeRef = returnTypeRef, - isVar = Flags.IS_VAR.get(flags), + isVar = isVar, initializer = null, getter = FirDefaultPropertyGetter(c.session, null, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))), - setter = FirDefaultPropertySetter(c.session, null, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))), + setter = if (isVar) { + FirDefaultPropertySetter(c.session, null, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))) + } else null, delegate = null ).apply { typeParameters += local.typeDeserializer.ownTypeParameters.map { it.firUnsafe() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index 15654f6235f..28319bede38 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -43,7 +43,7 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer() { Modality.FINAL this is FirNamedFunction && body == null -> Modality.ABSTRACT - this is FirProperty && initializer == null && getter.body == null && setter.body == null -> + this is FirProperty && initializer == null && getter.body == null && setter?.body == null -> Modality.ABSTRACT else -> Modality.OPEN diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index a9518467879..cece9915d06 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -350,8 +350,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { println() } if (property.isVar) { - property.setter.accept(this) - if (property.setter.body == null) { + property.setter?.accept(this) + if (property.setter?.body == null) { println() } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt index 14cf784f2f9..48c9d50ea44 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt @@ -22,7 +22,7 @@ interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMemberDecla // Should it be nullable or have some default? val getter: FirPropertyAccessor - val setter: FirPropertyAccessor + val setter: FirPropertyAccessor? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitProperty(this, data) @@ -32,6 +32,6 @@ interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMemberDecla initializer?.accept(visitor, data) delegate?.accept(visitor, data) getter.accept(visitor, data) - setter.accept(visitor, data) + setter?.accept(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt index b2ba1ba6e78..7252d3059f2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt @@ -36,7 +36,7 @@ class FirMemberPropertyImpl( override val isVar: Boolean, override var initializer: FirExpression?, override var getter: FirPropertyAccessor, - override var setter: FirPropertyAccessor, + override var setter: FirPropertyAccessor?, override var delegate: FirExpression? ) : FirAbstractCallableMember( session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef @@ -49,7 +49,7 @@ class FirMemberPropertyImpl( override fun transformChildren(transformer: FirTransformer, data: D): FirElement { getter = getter.transformSingle(transformer, data) - setter = setter.transformSingle(transformer, data) + setter = setter?.transformSingle(transformer, data) initializer = initializer?.transformSingle(transformer, data) delegate = delegate?.transformSingle(transformer, data)