FIR: support inline classes + render class attributes nicer

This commit is contained in:
Mikhail Glukhikh
2018-03-26 19:01:43 +03:00
parent 124c11df08
commit 5c53bdb142
42 changed files with 131 additions and 115 deletions
@@ -143,7 +143,20 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
if (memberDeclaration is FirCallableMember && memberDeclaration.isOverride) {
print("override ")
}
if (memberDeclaration is FirNamedFunction) {
if (memberDeclaration is FirClass) {
if (memberDeclaration.isInner) {
print("inner ")
}
if (memberDeclaration.isCompanion) {
print("companion ")
}
if (memberDeclaration.isData) {
print("data ")
}
if (memberDeclaration.isInline) {
print("inline ")
}
} else if (memberDeclaration is FirNamedFunction) {
if (memberDeclaration.isOperator) {
print("operator ")
}
@@ -194,12 +207,6 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitClass(klass: FirClass) {
visitMemberDeclaration(klass)
val attributes = listOfNotNull(
"inner".takeIf { klass.isInner },
"companion".takeIf { klass.isCompanion },
"data".takeIf { klass.isData }
)
print(attributes.joinToString(prefix = "(", postfix = ")"))
if (klass.superTypes.isNotEmpty()) {
print(" : ")
klass.superTypes.renderSeparated()
@@ -27,6 +27,8 @@ interface FirClass : FirDeclarationContainer, FirMemberDeclaration, FirSymbolOwn
val isData: Boolean
val isInline: Boolean
override val symbol: FirClassSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
@@ -30,7 +30,8 @@ open class FirClassImpl(
final override val classKind: ClassKind,
final override val isInner: Boolean,
final override val isCompanion: Boolean,
final override val isData: Boolean
final override val isData: Boolean,
override val isInline: Boolean
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, platformStatus), FirClass {
init {
@@ -32,7 +32,8 @@ class FirEnumEntryImpl(
classKind = ClassKind.ENUM_ENTRY,
isInner = false,
isCompanion = false,
isData = false
isData = false,
isInline = false
), FirEnumEntry {
override val arguments = mutableListOf<FirExpression>()
}