[FIR] Add extracting contracts in raw fir builder and light tree builder

This commit is contained in:
Dmitriy Novozhilov
2020-04-08 15:40:34 +03:00
parent 25cee12421
commit 4e1bf5f1e2
12 changed files with 302 additions and 16 deletions
@@ -544,7 +544,11 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
}
override fun visitStatement(statement: FirStatement) {
visitElement(statement)
if (statement is FirStubStatement) {
print("[StubStatement]")
} else {
visitElement(statement)
}
}
override fun visitReturnExpression(returnExpression: FirReturnExpression) {
@@ -84,4 +84,13 @@ fun <D> FirBlock.transformAllStatementsExceptLast(transformer: FirTransformer<D>
TransformData.Nothing
}
}
}
fun FirBlock.replaceFirstStatement(statement: FirStatement): FirStatement {
require(this is FirBlockImpl) {
"replaceFirstStatement should not be called for ${this::class.simpleName}"
}
val existed = statements[0]
statements[0] = statement
return existed
}
@@ -0,0 +1,32 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
object FirStubStatement : FirPureAbstractElement(), FirStatement {
override val source: FirSourceElement?
get() = null
override val annotations: List<FirAnnotationCall>
get() = emptyList()
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirStatement {
return this
}
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
return this
}
}