[IR] Fix location in logging warnings about unlinked symbols

This commit is contained in:
Dmitriy Dolovov
2022-06-08 23:51:43 +03:00
parent f9d7f54838
commit 6a227236f8
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.types.IrTypeProjection
import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
internal class UnlinkedDeclarationsProcessor( internal class UnlinkedDeclarationsProcessor(
private val builtIns: IrBuiltIns, private val builtIns: IrBuiltIns,
@@ -74,9 +75,15 @@ internal class UnlinkedDeclarationsProcessor(
return IrMessageLogger.Location("$module @ $fileName", lineNumber, columnNumber) return IrMessageLogger.Location("$module @ $fileName", lineNumber, columnNumber)
} }
private fun IrDeclaration.reportUnlinkedSymbolsWarning(kind: String, fqn: FqName) { private fun IrDeclaration.reportUnlinkedSymbolsWarning(kind: String, fqn: FqName, localName: Name? = null) =
reportWarning("$kind declaration ${fqn.asString()} contains unlinked symbols", location()) reportWarning(
} buildString {
append(kind).append(" declaration ")
if (localName != null) append(localName.asString()).append(" at ")
append(fqn.asString()).append(" contains unlinked symbols")
},
location()
)
private fun reportWarning(message: String, location: IrMessageLogger.Location?) { private fun reportWarning(message: String, location: IrMessageLogger.Location?) {
messageLogger.report(IrMessageLogger.Severity.WARNING, message, location) messageLogger.report(IrMessageLogger.Severity.WARNING, message, location)
@@ -128,9 +135,10 @@ internal class UnlinkedDeclarationsProcessor(
override fun visitVariable(declaration: IrVariable): IrStatement { override fun visitVariable(declaration: IrVariable): IrStatement {
if (declaration.type.isUnlinked()) { if (declaration.type.isUnlinked()) {
val fqn = declaration.parent.fqNameForIrSerialization.child(declaration.name) val fqn = declaration.parent.fqNameForIrSerialization
val localName = declaration.name
val kind = if (declaration.isVar) "var" else "val" val kind = if (declaration.isVar) "var" else "val"
declaration.reportUnlinkedSymbolsWarning(kind, fqn) declaration.reportUnlinkedSymbolsWarning(kind, fqn, localName)
declaration.type = unlinkedMarkerTypeHandler.unlinkedMarkerType declaration.type = unlinkedMarkerTypeHandler.unlinkedMarkerType
declaration.initializer = null declaration.initializer = null