-
Notifications
You must be signed in to change notification settings - Fork 0
/
KnowsCurrentFile.kt
68 lines (57 loc) · 2.61 KB
/
KnowsCurrentFile.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.rnett.plugin.ir
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocationWithRange
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.path
/**
* Utility methods for working with a [MessageCollector] when the current file is available
*/
public interface KnowsCurrentFile {
/**
* Gets the current file
*/
public val file: IrFile
/**
* Get the message location for an element
*/
public fun IrElement.messageLocation(): CompilerMessageSourceLocation? {
val range = file.fileEntry.getSourceRangeInfo(this.startOffset, this.endOffset)
return CompilerMessageLocationWithRange.create(
file.path,
range.startLineNumber + 1, //TODO do I need these +1s?
range.startColumnNumber + 1,
range.endLineNumber + 1,
range.endColumnNumber + 1,
null
)
}
/**
* Report a message
*/
public fun MessageCollector.report(
message: String,
level: CompilerMessageSeverity,
location: CompilerMessageSourceLocation?
): Unit =
report(level, message, location)
/**
* Report a message at the given element
*/
public fun MessageCollector.reportAt(message: String, level: CompilerMessageSeverity, location: IrElement): Unit =
report(message, level, location.messageLocation())
public fun MessageCollector.reportError(message: String, location: CompilerMessageSourceLocation?): Unit =
report(message, CompilerMessageSeverity.ERROR, location)
public fun MessageCollector.reportError(message: String, location: IrElement): Unit =
reportError(message, location.messageLocation())
public fun MessageCollector.reportWarning(message: String, location: CompilerMessageSourceLocation?): Unit =
report(message, CompilerMessageSeverity.WARNING, location)
public fun MessageCollector.reportWarning(message: String, location: IrElement): Unit =
reportWarning(message, location.messageLocation())
public fun MessageCollector.reportInfo(message: String, location: CompilerMessageSourceLocation?): Unit =
report(message, CompilerMessageSeverity.INFO, location)
public fun MessageCollector.reportInfo(message: String, location: IrElement): Unit =
reportInfo(message, location.messageLocation())
}