[FIR] Replace FIR tree with generated implementation

This commit is contained in:
Dmitriy Novozhilov
2019-09-26 15:36:32 +03:00
parent d6d4b3329b
commit cb981919f9
366 changed files with 11081 additions and 8224 deletions
@@ -18,8 +18,8 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -268,7 +268,7 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) {
require(inModule)
val dumpOutput = index.files[file] ?: error("No location for ${file.name}")
val dumper = HtmlFirDump(LinkResolver(dumpOutput), file.fileSession)
val dumper = HtmlFirDump(LinkResolver(dumpOutput), file.session)
val builder = StringBuilder()
dumper.generate(file, builder)
@@ -338,9 +338,9 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) {
visitElement(valueParameter)
}
override fun visitNamedFunction(namedFunction: FirNamedFunction) {
indexDeclaration(namedFunction)
visitElement(namedFunction)
override fun visitSimpleFunction(simpleFunction: FirSimpleFunction) {
indexDeclaration(simpleFunction)
visitElement(simpleFunction)
}
override fun visitTypeParameter(typeParameter: FirTypeParameter) {
@@ -576,7 +576,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
}
}
generateDeclarations(klass)
generateDeclarations(klass.declarations)
br
}
@@ -773,14 +773,14 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(memberDeclaration: FirMemberDeclaration) {
when (memberDeclaration) {
is FirRegularClass -> generate(memberDeclaration)
is FirNamedFunction -> generate(memberDeclaration)
is FirProperty -> generate(memberDeclaration)
is FirSimpleFunction -> generate(memberDeclaration)
is FirProperty -> if (memberDeclaration.isLocal) generate(memberDeclaration as FirVariable<*>) else generate(memberDeclaration)
is FirConstructor -> generate(memberDeclaration)
else -> unsupported(memberDeclaration)
}
}
private fun FlowContent.generateTypeParameters(typeParameterContainer: FirTypeParameterContainer) {
private fun FlowContent.generateTypeParameters(typeParameterContainer: FirTypeParametersOwner) {
if (typeParameterContainer.typeParameters.isEmpty()) return
+"<"
generateList(typeParameterContainer.typeParameters) {
@@ -873,7 +873,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(statement: FirStatement) {
when (statement) {
is FirNamedFunction -> generate(statement)
is FirSimpleFunction -> generate(statement)
is FirAnonymousObject -> generate(statement, isStatement = true)
is FirAnonymousFunction -> generate(statement, isStatement = true)
is FirWhileLoop -> generate(statement)
@@ -1074,7 +1074,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(whileLoop: FirWhileLoop) {
iline {
generateLabel(whileLoop)
generateLabel(whileLoop.label)
keyword("while ")
+"("
generate(whileLoop.condition)
@@ -1153,8 +1153,8 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
}
}
private fun FlowContent.generateLabel(labeledElement: FirLabeledElement) {
val label = labeledElement.label ?: return
private fun FlowContent.generateLabel(label: FirLabel?) {
if (label == null) return
span("label") {
+label.name
+"@"
@@ -1301,30 +1301,29 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
generate(it)
}
}
generateDeclarations(anonymousObject)
generateDeclarations(anonymousObject.declarations)
}
}
}
private fun FlowContent.generateDeclarations(declarationContainer: FirDeclarationContainer) {
if (declarationContainer.declarations.isNotEmpty()) {
private fun FlowContent.generateDeclarations(declarations: List<FirDeclaration>) {
if (declarations.isNotEmpty()) {
+" {"
br
withIdentLevel {
for (declaration in declarationContainer.declarations) {
for (declaration in declarations) {
generate(declaration)
line {}
}
}
inl()
+"}"
}
}
private fun FlowContent.generate(function: FirNamedFunction) {
private fun FlowContent.generate(function: FirSimpleFunction) {
generateMultiLineExpression(isStatement = true) {
iline {
declarationStatus(function.status)
@@ -1365,7 +1364,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(anonymousFunction: FirAnonymousFunction, isStatement: Boolean) {
generateMultiLineExpression(isStatement) {
iline {
generateLabel(anonymousFunction)
generateLabel(anonymousFunction.label)
keyword("fun ")
generateReceiver(anonymousFunction.receiverTypeRef)