Extract local class declarations

This commit is contained in:
Tamas Vajk
2021-12-21 11:12:44 +01:00
committed by Ian Lynagh
parent 1e64887903
commit e0bf7d8246
13 changed files with 558 additions and 16 deletions

View File

@@ -201,13 +201,13 @@ open class KotlinFileExtractor(
}
}
private fun extracLocalTypeDeclStmt(c: IrClass, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
private fun extractLocalTypeDeclStmt(c: IrClass, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
@Suppress("UNCHECKED_CAST")
val id = extractClassSource(c) as Label<out DbClass>
extracLocalTypeDeclStmt(id, c, callable, parent, idx)
extractLocalTypeDeclStmt(id, c, callable, parent, idx)
}
private fun extracLocalTypeDeclStmt(id: Label<out DbClass>, locElement: IrElement, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
private fun extractLocalTypeDeclStmt(id: Label<out DbClass>, locElement: IrElement, callable: Label<out DbCallable>, parent: Label<out DbStmtparent>, idx: Int) {
val stmtId = tw.getFreshIdLabel<DbLocaltypedeclstmt>()
tw.writeStmts_localtypedeclstmt(stmtId, parent, idx, callable)
tw.writeIsLocalClassOrInterface(id, stmtId)
@@ -656,16 +656,12 @@ open class KotlinFileExtractor(
extractVariable(s, callable, parent, idx)
}
is IrClass -> {
if (s.isAnonymousObject) {
extracLocalTypeDeclStmt(s, callable, parent, idx)
} else {
logger.warnElement(Severity.ErrorSevere, "Found non anonymous IrClass as IrStatement: " + s.javaClass, s)
}
extractLocalTypeDeclStmt(s, callable, parent, idx)
}
is IrFunction -> {
if (s.isLocalFunction()) {
val classId = extractGeneratedClass(s, listOf(pluginContext.irBuiltIns.anyType))
extracLocalTypeDeclStmt(classId, s, callable, parent, idx)
extractLocalTypeDeclStmt(classId, s, callable, parent, idx)
} else {
logger.warnElement(Severity.ErrorSevere, "Expected to find local function", s)
}