Get rid of cli in common ir

(cherry picked from commit d16ff1f4f9fbf54d2bc1916c80adfba2dfd4d513)
This commit is contained in:
Mikhael Bogdanov
2017-11-16 14:08:51 +01:00
committed by Vasily Levchenko
parent efbc8fd3e6
commit 28fff970e9
2 changed files with 28 additions and 8 deletions
@@ -21,10 +21,15 @@ import org.jetbrains.kotlin.backend.konan.descriptors.KonanSharedVariablesManage
import org.jetbrains.kotlin.backend.konan.descriptors.konanInternal
import org.jetbrains.kotlin.backend.konan.ir.KonanIr
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.util.getCompilerMessageLocation
import org.jetbrains.kotlin.name.Name
abstract internal class KonanBackendContext(val config: KonanConfig) : CommonBackendContext {
@@ -44,6 +49,25 @@ abstract internal class KonanBackendContext(val config: KonanConfig) : CommonBac
override fun getInternalFunctions(name: String): List<FunctionDescriptor> =
builtIns.konanInternal.getContributedFunctions(Name.identifier(name), NoLookupLocation.FROM_BACKEND).toList()
override val messageCollector: MessageCollector
val messageCollector: MessageCollector
get() = config.configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
override fun report(element: IrElement?, irFile: IrFile?, message: String, isError: Boolean) {
val location = element?.getCompilerMessageLocation(irFile ?: error("irFile should be not null for $element"))
this.messageCollector.report(
if (isError) CompilerMessageSeverity.ERROR else CompilerMessageSeverity.WARNING,
message, location
)
}
private fun IrElement.getCompilerMessageLocation(containingFile: IrFile): CompilerMessageLocation? {
val sourceRangeInfo = containingFile.fileEntry.getSourceRangeInfo(this.startOffset, this.endOffset)
return CompilerMessageLocation.create(
path = sourceRangeInfo.filePath,
line = sourceRangeInfo.startLineNumber,
column = sourceRangeInfo.startColumnNumber,
lineContent = null // TODO: retrieve the line content.
)
}
}
@@ -17,22 +17,18 @@
package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.util.getCompilerMessageLocation
internal fun CommonBackendContext.reportCompilationError(message: String, irFile: IrFile, irElement: IrElement): Nothing {
val location = irElement.getCompilerMessageLocation(irFile)
this.messageCollector.report(CompilerMessageSeverity.ERROR, message, location)
report(irElement, irFile, message, true)
throw KonanCompilationException()
}
internal fun CommonBackendContext.reportCompilationError(message: String) {
this.messageCollector.report(CompilerMessageSeverity.ERROR, message, null)
report(null, null, message, true)
}
internal fun CommonBackendContext.reportCompilationWarning(message: String) {
this.messageCollector.report(CompilerMessageSeverity.WARNING, message, null)
report(null, null, message, false)
}