FIR: record and serialize the modifier "fun" for functional interface
This commit is contained in:
committed by
Mikhail Glukhikh
parent
6a2fed33d3
commit
0d2552b0b6
+1
-1
@@ -98,7 +98,7 @@ class FirElementSerializer private constructor(
|
||||
regularClass?.isExternal == true,
|
||||
regularClass?.isExpect == true,
|
||||
regularClass?.isInline == true,
|
||||
false // TODO: klass.isFun not supported yet
|
||||
regularClass?.isFun == true
|
||||
)
|
||||
if (flags != builder.flags) {
|
||||
builder.flags = flags
|
||||
|
||||
@@ -183,7 +183,7 @@ class Fir2IrClassifierStorage(
|
||||
isExternal = regularClass.isExternal,
|
||||
isInline = regularClass.isInline,
|
||||
isExpect = regularClass.isExpect,
|
||||
isFun = false // TODO FirRegularClass.isFun
|
||||
isFun = regularClass.isFun
|
||||
).apply {
|
||||
metadata = FirMetadataSource.Class(regularClass, descriptor)
|
||||
descriptor.bind(this)
|
||||
|
||||
+1
@@ -382,6 +382,7 @@ class DeclarationsConverter(
|
||||
isCompanion = modifiers.isCompanion() && classKind == ClassKind.OBJECT
|
||||
isData = modifiers.isDataClass()
|
||||
isInline = modifiers.isInlineClass()
|
||||
isFun = modifiers.isFunctionalInterface()
|
||||
}
|
||||
|
||||
buildRegularClass {
|
||||
|
||||
+4
@@ -78,6 +78,10 @@ class Modifier(
|
||||
return classModifiers.contains(ClassModifier.COMPANION)
|
||||
}
|
||||
|
||||
fun isFunctionalInterface(): Boolean {
|
||||
return classModifiers.contains(ClassModifier.FUN)
|
||||
}
|
||||
|
||||
fun hasOverride(): Boolean {
|
||||
return memberModifiers.contains(MemberModifier.OVERRIDE)
|
||||
}
|
||||
|
||||
+2
-1
@@ -11,7 +11,8 @@ enum class ClassModifier {
|
||||
DATA,
|
||||
INLINE,
|
||||
INNER,
|
||||
COMPANION
|
||||
COMPANION,
|
||||
FUN
|
||||
}
|
||||
|
||||
enum class MemberModifier {
|
||||
|
||||
@@ -670,6 +670,7 @@ class RawFirBuilder(
|
||||
isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true
|
||||
isData = classOrObject.hasModifier(DATA_KEYWORD)
|
||||
isInline = classOrObject.hasModifier(INLINE_KEYWORD)
|
||||
isFun = classOrObject.hasModifier(FUN_KEYWORD)
|
||||
}
|
||||
withCapturedTypeParameters {
|
||||
if (!status.isInner) context.capturedTypeParameters = context.capturedTypeParameters.clear()
|
||||
|
||||
@@ -39,6 +39,7 @@ interface FirDeclarationStatus : FirElement {
|
||||
val isStatic: Boolean
|
||||
val isFromSealedClass: Boolean
|
||||
val isFromEnumClass: Boolean
|
||||
val isFun: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDeclarationStatus(this, data)
|
||||
}
|
||||
|
||||
+1
@@ -38,6 +38,7 @@ interface FirResolvedDeclarationStatus : FirDeclarationStatus {
|
||||
override val isStatic: Boolean
|
||||
override val isFromSealedClass: Boolean
|
||||
override val isFromEnumClass: Boolean
|
||||
override val isFun: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedDeclarationStatus(this, data)
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ inline val FirRegularClass.isInner get() = status.isInner
|
||||
inline val FirRegularClass.isCompanion get() = status.isCompanion
|
||||
inline val FirRegularClass.isData get() = status.isData
|
||||
inline val FirRegularClass.isInline get() = status.isInline
|
||||
inline val FirRegularClass.isFun get() = status.isFun
|
||||
inline val FirMemberDeclaration.modality get() = status.modality
|
||||
inline val FirMemberDeclaration.visibility get() = status.visibility
|
||||
inline val FirMemberDeclaration.allowsToHaveFakeOverride: Boolean
|
||||
|
||||
+8
-1
@@ -136,6 +136,12 @@ open class FirDeclarationStatusImpl(
|
||||
this[FROM_ENUM] = value
|
||||
}
|
||||
|
||||
override var isFun: Boolean
|
||||
get() = this[FUN]
|
||||
set(value) {
|
||||
this[FUN] = value
|
||||
}
|
||||
|
||||
private enum class Modifier(val mask: Int) {
|
||||
EXPECT(0x1),
|
||||
ACTUAL(0x2),
|
||||
@@ -153,7 +159,8 @@ open class FirDeclarationStatusImpl(
|
||||
SUSPEND(0x2000),
|
||||
STATIC(0x4000),
|
||||
FROM_SEALED(0x8000),
|
||||
FROM_ENUM(0x10000)
|
||||
FROM_ENUM(0x10000),
|
||||
FUN(0x20000)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
+1
-1
@@ -323,7 +323,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
generateBooleanFields(
|
||||
"expect", "actual", "override", "operator", "infix", "inline", "tailRec",
|
||||
"external", "const", "lateInit", "inner", "companion", "data", "suspend", "static",
|
||||
"fromSealedClass", "fromEnumClass"
|
||||
"fromSealedClass", "fromEnumClass", "fun"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user