FIR: handle unresolved modality as questionable
This commit is contained in:
@@ -45,7 +45,7 @@ class RawFirBuilder(val session: FirSession) {
|
||||
}
|
||||
}
|
||||
|
||||
private val KtDeclaration.modality: Modality
|
||||
private val KtDeclaration.modality: Modality?
|
||||
get() {
|
||||
val modifierType = modalityModifierType()
|
||||
return when (modifierType) {
|
||||
@@ -53,7 +53,7 @@ class RawFirBuilder(val session: FirSession) {
|
||||
KtTokens.SEALED_KEYWORD -> Modality.SEALED
|
||||
KtTokens.ABSTRACT_KEYWORD -> Modality.ABSTRACT
|
||||
KtTokens.OPEN_KEYWORD -> Modality.OPEN
|
||||
else -> Modality.FINAL // FIX ME
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +106,16 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
else -> toString()
|
||||
}
|
||||
|
||||
private fun FirMemberDeclaration.modalityAsString(): String {
|
||||
return modality?.name?.toLowerCase() ?: run {
|
||||
if (this is FirCallableMember && this.isOverride) {
|
||||
"open?"
|
||||
} else {
|
||||
"final?"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) {
|
||||
memberDeclaration.annotations.renderAnnotations()
|
||||
if (memberDeclaration.typeParameters.isNotEmpty()) {
|
||||
@@ -113,7 +123,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
memberDeclaration.typeParameters.renderSeparated()
|
||||
print("> ")
|
||||
}
|
||||
print(memberDeclaration.visibility.asString() + " " + memberDeclaration.modality.name.toLowerCase() + " ")
|
||||
print(memberDeclaration.visibility.asString() + " " + memberDeclaration.modalityAsString() + " ")
|
||||
if (memberDeclaration is FirCallableMember && memberDeclaration.isOverride) {
|
||||
print("override ")
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
interface FirMemberDeclaration : FirTypeParameterContainer, FirNamedDeclaration, FirAnnotationContainer {
|
||||
val visibility: Visibility
|
||||
|
||||
val modality: Modality
|
||||
val modality: Modality?
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitMemberDeclaration(this, data)
|
||||
|
||||
@@ -5,10 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirDescriptorOwner
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirResolvedClass : FirClass, FirDescriptorOwner<FirResolvedClass> {
|
||||
override val modality: Modality
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitResolvedClass(this, data)
|
||||
}
|
||||
@@ -5,10 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirDescriptorOwner
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirResolvedTypeAlias : FirTypeAlias, FirDescriptorOwner<FirResolvedTypeAlias> {
|
||||
override val modality: Modality
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitResolvedTypeAlias(this, data)
|
||||
}
|
||||
+1
-1
@@ -21,7 +21,7 @@ abstract class FirAbstractCallableMember(
|
||||
psi: PsiElement?,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
modality: Modality?,
|
||||
final override val isOverride: Boolean,
|
||||
final override var receiverType: FirType?,
|
||||
final override var returnType: FirType
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ abstract class FirAbstractMemberDeclaration(
|
||||
psi: PsiElement?,
|
||||
name: Name,
|
||||
final override val visibility: Visibility,
|
||||
final override val modality: Modality
|
||||
final override val modality: Modality?
|
||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirMemberDeclaration {
|
||||
final override val typeParameters = mutableListOf<FirTypeParameter>()
|
||||
}
|
||||
@@ -22,7 +22,7 @@ open class FirClassImpl(
|
||||
psi: PsiElement?,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
modality: Modality?,
|
||||
final override val classKind: ClassKind,
|
||||
final override val isInner: Boolean,
|
||||
final override val isCompanion: Boolean,
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ class FirMemberFunctionImpl(
|
||||
psi: PsiElement?,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
modality: Modality?,
|
||||
isOverride: Boolean,
|
||||
override val isOperator: Boolean,
|
||||
override val isInfix: Boolean,
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ class FirMemberPropertyImpl(
|
||||
psi: PsiElement?,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
modality: Modality?,
|
||||
isOverride: Boolean,
|
||||
override val isConst: Boolean,
|
||||
receiverType: FirType?,
|
||||
|
||||
+5
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirBasedDescriptor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedClass
|
||||
@@ -17,6 +19,9 @@ class FirResolvedClassImpl(val delegate: FirClass, override val descriptor: FirB
|
||||
descriptor.bind(this)
|
||||
}
|
||||
|
||||
override val modality: Modality
|
||||
get() = delegate.modality ?: if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return super<FirResolvedClass>.accept(visitor, data)
|
||||
}
|
||||
|
||||
+4
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirBasedDescriptor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedTypeAlias
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
@@ -13,6 +14,9 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
class FirResolvedTypeAliasImpl(val delegate: FirTypeAlias, override val descriptor: FirBasedDescriptor<FirResolvedTypeAlias>) :
|
||||
FirResolvedTypeAlias, FirTypeAlias by delegate {
|
||||
|
||||
override val modality: Modality
|
||||
get() = delegate.modality ?: Modality.FINAL
|
||||
|
||||
init {
|
||||
descriptor.bind(this)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user