Minor: introduce EXCEPTION report category

This commit is contained in:
Alexey Tsvetkov
2017-01-13 08:24:23 +03:00
parent c2a125ff1c
commit 072edf4b5a
5 changed files with 59 additions and 42 deletions
@@ -32,9 +32,10 @@ interface CompilerServicesFacadeBase : Remote {
enum class ReportCategory(val code: Int) {
COMPILER_MESSAGE(0),
DAEMON_MESSAGE(1),
IC_MESSAGE(2),
OUTPUT_MESSAGE(3);
EXCEPTION(1),
DAEMON_MESSAGE(2),
IC_MESSAGE(3),
OUTPUT_MESSAGE(4);
companion object {
fun fromCode(code: Int): ReportCategory? =
@@ -58,12 +59,3 @@ enum class ReportSeverity(val code: Int) {
fun CompilerServicesFacadeBase.report(category: ReportCategory, severity: ReportSeverity, message: String? = null, attachment: Serializable? = null) {
report(category.code, severity.code, message, attachment)
}
data class CompilerMessageAttachment(
val severity: CompilerMessageSeverity,
val location: CompilerMessageLocation
) : Serializable {
companion object {
const val serialVersionUID = 0L
}
}
@@ -33,25 +33,28 @@ internal class CompileServicesFacadeMessageCollector(
}
override fun report(severity: CompilerMessageSeverity, message: String, location: CompilerMessageLocation) {
val reportCategory = when (severity) {
CompilerMessageSeverity.OUTPUT -> ReportCategory.OUTPUT_MESSAGE
else -> ReportCategory.COMPILER_MESSAGE
when (severity) {
CompilerMessageSeverity.OUTPUT -> {
servicesFacade.report(ReportCategory.OUTPUT_MESSAGE, ReportSeverity.ERROR, message)
}
CompilerMessageSeverity.EXCEPTION -> {
servicesFacade.report(ReportCategory.EXCEPTION, ReportSeverity.ERROR, message)
}
else -> {
val reportSeverity = when (severity) {
CompilerMessageSeverity.ERROR -> ReportSeverity.ERROR
CompilerMessageSeverity.WARNING -> ReportSeverity.WARNING
CompilerMessageSeverity.INFO -> ReportSeverity.INFO
else -> ReportSeverity.DEBUG
}
if (reportSeverity.code <= mySeverity) {
servicesFacade.report(ReportCategory.COMPILER_MESSAGE, reportSeverity, message, location)
}
}
}
val reportSeverity = when (severity) {
CompilerMessageSeverity.ERROR,
CompilerMessageSeverity.EXCEPTION -> ReportSeverity.ERROR
CompilerMessageSeverity.WARNING -> ReportSeverity.WARNING
CompilerMessageSeverity.INFO -> ReportSeverity.INFO
CompilerMessageSeverity.LOGGING -> ReportSeverity.DEBUG
CompilerMessageSeverity.OUTPUT -> ReportSeverity.ERROR
}
if (reportSeverity.code <= mySeverity) {
servicesFacade.report(reportCategory, reportSeverity, message, CompilerMessageAttachment(severity, location))
}
hasErrors = hasErrors || severity == CompilerMessageSeverity.ERROR
hasErrors = hasErrors || severity == CompilerMessageSeverity.ERROR || severity == CompilerMessageSeverity.EXCEPTION
}
override fun hasErrors(): Boolean = hasErrors
@@ -39,12 +39,19 @@ internal class JpsCompilerServicesFacadeImpl(
ReportCategory.OUTPUT_MESSAGE -> {
env.messageCollector.report(CompilerMessageSeverity.OUTPUT, message!!, CompilerMessageLocation.NO_LOCATION)
}
ReportCategory.EXCEPTION -> {
env.messageCollector.report(CompilerMessageSeverity.EXCEPTION, message!!, CompilerMessageLocation.NO_LOCATION)
}
ReportCategory.COMPILER_MESSAGE -> {
val compilerMessageAttachment = attachment as? CompilerMessageAttachment
if (message != null && compilerMessageAttachment != null) {
val originalSeverity = compilerMessageAttachment.severity
val originalLocation = compilerMessageAttachment.location
env.messageCollector.report(originalSeverity, message, originalLocation)
val compilerSeverity = when (ReportSeverity.fromCode(severity)) {
ReportSeverity.ERROR -> CompilerMessageSeverity.ERROR
ReportSeverity.WARNING -> CompilerMessageSeverity.WARNING
ReportSeverity.INFO -> CompilerMessageSeverity.INFO
ReportSeverity.DEBUG -> CompilerMessageSeverity.LOGGING
else -> throw IllegalStateException("Unexpected compiler message report severity $severity")
}
if (message != null && attachment is CompilerMessageLocation) {
env.messageCollector.report(compilerSeverity, message, attachment)
}
else {
reportUnexpected(category, severity, message, attachment)
@@ -110,14 +110,19 @@ class JpsKotlinCompilerRunner : KotlinCompilerRunner<JpsCompilerEnvironment>() {
return res?.get()?.let { exitCodeFromProcessExitCode(it) }
}
private fun reportCategories(verbose: Boolean): Array<Int> =
private fun reportCategories(verbose: Boolean): Array<Int> {
val categories =
if (!verbose) {
arrayOf(ReportCategory.COMPILER_MESSAGE.code)
arrayOf(ReportCategory.COMPILER_MESSAGE, ReportCategory.EXCEPTION)
}
else {
ReportCategory.values().map { it.code }.toTypedArray()
ReportCategory.values()
}
return categories.map { it.code }.toTypedArray()
}
private fun reportSeverity(verbose: Boolean): Int =
if (!verbose) {
ReportSeverity.INFO.code
@@ -29,9 +29,22 @@ internal open class GradleCompilerServicesFacadeImpl(
val reportCategory = ReportCategory.fromCode(category)
when (reportCategory) {
ReportCategory.OUTPUT_MESSAGE -> {
compilerMessageCollector.report(CompilerMessageSeverity.OUTPUT, message!!, CompilerMessageLocation.NO_LOCATION)
}
ReportCategory.EXCEPTION -> {
compilerMessageCollector.report(CompilerMessageSeverity.EXCEPTION, message!!, CompilerMessageLocation.NO_LOCATION)
}
ReportCategory.COMPILER_MESSAGE -> {
if (message != null && attachment is CompilerMessageAttachment) {
compilerMessageCollector.report(attachment.severity, message, attachment.location)
val compilerSeverity = when (ReportSeverity.fromCode(severity)) {
ReportSeverity.ERROR -> CompilerMessageSeverity.ERROR
ReportSeverity.WARNING -> CompilerMessageSeverity.WARNING
ReportSeverity.INFO -> CompilerMessageSeverity.INFO
ReportSeverity.DEBUG -> CompilerMessageSeverity.LOGGING
else -> throw IllegalStateException("Unexpected compiler message report severity $severity")
}
if (message != null && attachment is CompilerMessageLocation) {
compilerMessageCollector.report(compilerSeverity, message, attachment)
}
else {
reportUnexpectedMessage(category, severity, message, attachment)
@@ -43,9 +56,6 @@ internal open class GradleCompilerServicesFacadeImpl(
ReportCategory.DAEMON_MESSAGE -> {
log.kotlinDebug { "[DAEMON] $message" }
}
ReportCategory.OUTPUT_MESSAGE -> {
compilerMessageCollector.report(CompilerMessageSeverity.OUTPUT, message!!, CompilerMessageLocation.NO_LOCATION)
}
else -> {
reportUnexpectedMessage(category, severity, message, attachment)
}