Enable compiler plugins in JS IR backend (and WASM too, since they use same loadIr function)

This commit is contained in:
Leonid Startsev
2019-11-20 19:14:17 +03:00
parent 0441e484a6
commit ed786c4daf
@@ -9,6 +9,8 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.backend.common.LoggingContext
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.backend.common.serialization.DescriptorTable
import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDeserializer
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
@@ -119,7 +121,7 @@ fun generateKLib(
val psi2IrContext = runAnalysisAndPreparePsi2Ir(depsDescriptors)
val moduleFragment = psi2IrContext.generateModuleFragment(files)
val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, files)
val moduleName = configuration[CommonConfigurationKeys.MODULE_NAME]!!
@@ -176,8 +178,7 @@ fun loadIr(
deserializer.deserializeIrModuleHeader(depsDescriptors.getModuleDescriptor(it))!!
}
val moduleFragment = psi2IrContext.generateModuleFragment(files, deserializer)
// todo: add postprocessing step
val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, files, deserializer)
return IrModuleInfo(moduleFragment, deserializedModuleFragments, irBuiltIns, symbolTable, deserializer)
}
@@ -195,6 +196,38 @@ private fun runAnalysisAndPreparePsi2Ir(depsDescriptors: ModulesStructure): Gene
)
}
fun GeneratorContext.generateModuleFragmentWithPlugins(
project: Project,
files: List<KtFile>,
deserializer: IrDeserializer? = null
): IrModuleFragment {
val psi2Ir = Psi2IrTranslator(languageVersionSettings, configuration)
for (extension in IrGenerationExtension.getInstances(project)) {
psi2Ir.addPostprocessingStep { module ->
extension.generate(
module,
IrPluginContext(
moduleDescriptor,
bindingContext,
languageVersionSettings,
symbolTable,
typeTranslator,
irBuiltIns
)
)
}
}
val moduleFragment =
psi2Ir.generateModuleFragment(
this,
files,
deserializer
)
return moduleFragment
}
fun GeneratorContext.generateModuleFragment(files: List<KtFile>, deserializer: IrDeserializer? = null) =
Psi2IrTranslator(languageVersionSettings, configuration).generateModuleFragment(this, files, deserializer)