[Plugin API] Provide diagnostic API for IR plugins
This commit is contained in:
+9
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.builders.IrGeneratorContext
|
import org.jetbrains.kotlin.ir.builders.IrGeneratorContext
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||||
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
|
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -36,6 +37,14 @@ interface IrPluginContext : IrGeneratorContext {
|
|||||||
|
|
||||||
val platform: TargetPlatform?
|
val platform: TargetPlatform?
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a logger instance to post diagnostic messages from plugin
|
||||||
|
*
|
||||||
|
* @param pluginId the unique plugin ID to make it easy to distinguish in log
|
||||||
|
* @return the logger associated with specified ID
|
||||||
|
*/
|
||||||
|
fun createDiagnosticReporter(pluginId: String): IrMessageLogger
|
||||||
|
|
||||||
// The following API is experimental
|
// The following API is experimental
|
||||||
fun referenceClass(fqName: FqName): IrClassSymbol?
|
fun referenceClass(fqName: FqName): IrClassSymbol?
|
||||||
fun referenceTypeAlias(fqName: FqName): IrTypeAliasSymbol?
|
fun referenceTypeAlias(fqName: FqName): IrTypeAliasSymbol?
|
||||||
|
|||||||
+14
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
|||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
|
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||||
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
|
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
|
||||||
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
import org.jetbrains.kotlin.ir.util.TypeTranslator
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -33,6 +34,7 @@ open class IrPluginContextImpl constructor(
|
|||||||
override val typeTranslator: TypeTranslator,
|
override val typeTranslator: TypeTranslator,
|
||||||
override val irBuiltIns: IrBuiltIns,
|
override val irBuiltIns: IrBuiltIns,
|
||||||
val linker: IrDeserializer,
|
val linker: IrDeserializer,
|
||||||
|
private val diagnosticReporter: IrMessageLogger,
|
||||||
override val symbols: BuiltinSymbolsBase = BuiltinSymbolsBase(irBuiltIns, irBuiltIns.builtIns, st)
|
override val symbols: BuiltinSymbolsBase = BuiltinSymbolsBase(irBuiltIns, irBuiltIns.builtIns, st)
|
||||||
) : IrPluginContext {
|
) : IrPluginContext {
|
||||||
|
|
||||||
@@ -68,6 +70,18 @@ open class IrPluginContextImpl constructor(
|
|||||||
return symbol
|
return symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun createDiagnosticReporter(pluginId: String): IrMessageLogger {
|
||||||
|
return object : IrMessageLogger {
|
||||||
|
override fun report(
|
||||||
|
severity: IrMessageLogger.Severity,
|
||||||
|
message: String,
|
||||||
|
location: IrMessageLogger.Location?
|
||||||
|
) {
|
||||||
|
diagnosticReporter.report(severity, "[Plugin $pluginId] $message", location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun <S : IrSymbol> resolveSymbolCollection(fqName: FqName, referencer: (MemberScope) -> Collection<S>): Collection<S> {
|
private fun <S : IrSymbol> resolveSymbolCollection(fqName: FqName, referencer: (MemberScope) -> Collection<S>): Collection<S> {
|
||||||
val memberScope = resolveMemberScope(fqName) ?: return emptyList()
|
val memberScope = resolveMemberScope(fqName) ?: return emptyList()
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin
|
import org.jetbrains.kotlin.descriptors.konan.DeserializedKlibModuleOrigin
|
||||||
import org.jetbrains.kotlin.descriptors.konan.KlibModuleOrigin
|
import org.jetbrains.kotlin.descriptors.konan.KlibModuleOrigin
|
||||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.EmptyLoggingContext
|
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrLinker
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrLinker
|
||||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc
|
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc
|
||||||
import org.jetbrains.kotlin.ir.builders.TranslationPluginContext
|
import org.jetbrains.kotlin.ir.builders.TranslationPluginContext
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import com.intellij.openapi.vfs.VfsUtilCore
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport
|
import org.jetbrains.kotlin.analyzer.AbstractAnalyzerWithCompilerReport
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.backend.common.LoggingContext
|
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideChecker
|
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideChecker
|
||||||
@@ -328,7 +327,8 @@ fun GeneratorContext.generateModuleFragmentWithPlugins(
|
|||||||
symbolTable,
|
symbolTable,
|
||||||
typeTranslator,
|
typeTranslator,
|
||||||
irBuiltIns,
|
irBuiltIns,
|
||||||
linker = irLinker
|
linker = irLinker,
|
||||||
|
messageLogger
|
||||||
)
|
)
|
||||||
|
|
||||||
for (extension in extensions) {
|
for (extension in extensions) {
|
||||||
|
|||||||
Reference in New Issue
Block a user