// MODULE: m1 // FILE: m1.kt package m1 interface BasicDatabase interface BasicSchema abstract class BaseIntrospector { protected abstract fun createDatabaseRetriever(database: D): AbstractDatabaseRetriever protected abstract inner class AbstractDatabaseRetriever protected constructor(protected val database: D) : AbstractRetriever() protected abstract inner class AbstractRetriever } interface BasicSingleDatabase : BasicDatabase interface BasicModSchema : BasicSchema abstract class BaseSingleDatabaseIntrospector protected constructor() : BaseIntrospector() // MODULE: m2(m1) // FILE: m2.kt package m2 import m1.* interface SqliteRoot : BasicSingleDatabase interface SqliteSchema : BasicModSchema class SqliteIntrospector : BaseSingleDatabaseIntrospector() { override fun createDatabaseRetriever(database: SqliteRoot) = object : AbstractDatabaseRetriever(database) { } }