[Plugin API] Provide special context in EP for link-time resolve

- requires to customize declarations from synthetic declarations
This commit is contained in:
Roman Artemev
2020-08-21 15:19:14 +03:00
parent ea98062241
commit a095909d5c
7 changed files with 74 additions and 10 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.builders.TranslationPluginContext
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFile
@@ -69,6 +70,8 @@ abstract class KotlinIrLinker(
abstract val fakeOverrideBuilder: FakeOverrideBuilder
abstract val translationPluginContext: TranslationPluginContext?
private val haveSeen = mutableSetOf<IrSymbol>()
private val fakeOverrideClassQueue = mutableListOf<IrClass>()
@@ -540,8 +543,12 @@ abstract class KotlinIrLinker(
}
}
return linkerExtensions.firstNotNullResult { it.resolveSymbol(symbol) }?.also {
require(symbol.owner == it)
return translationPluginContext?.let { ctx ->
linkerExtensions.firstNotNullResult {
it.resolveSymbol(symbol, ctx)
}?.also {
require(symbol.owner == it)
}
}
}