Store errors into separate files
This commit is contained in:
+11
-3
@@ -16,8 +16,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.incremental
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.incremental.AbiSnapshotImpl.Companion.readAbiSnapshot
|
||||
import org.jetbrains.kotlin.incremental.AbiSnapshotImpl.Companion.writeAbiSnapshot
|
||||
import org.jetbrains.kotlin.incremental.util.reportException
|
||||
import java.io.*
|
||||
|
||||
data class BuildInfo(val startTS: Long, val dependencyToAbiSnapshot: Map<String, AbiSnapshot> = mapOf()) : Serializable {
|
||||
@@ -43,10 +45,16 @@ data class BuildInfo(val startTS: Long, val dependencyToAbiSnapshot: Map<String,
|
||||
}
|
||||
}
|
||||
|
||||
fun read(file: File): BuildInfo =
|
||||
ObjectInputStream(FileInputStream(file)).use {
|
||||
it.readBuildInfo()
|
||||
fun read(file: File, messageCollector: MessageCollector): BuildInfo? {
|
||||
return try {
|
||||
ObjectInputStream(FileInputStream(file)).use {
|
||||
it.readBuildInfo()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
messageCollector.reportException(e)
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun write(buildInfo: BuildInfo, file: File) {
|
||||
ObjectOutputStream(FileOutputStream(file)).use {
|
||||
|
||||
+3
-4
@@ -18,15 +18,12 @@ package org.jetbrains.kotlin.incremental
|
||||
|
||||
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
|
||||
import org.jetbrains.kotlin.build.GeneratedFile
|
||||
import org.jetbrains.kotlin.build.report.BuildReporter
|
||||
import org.jetbrains.kotlin.build.report.debug
|
||||
import org.jetbrains.kotlin.build.report.info
|
||||
import org.jetbrains.kotlin.build.report.*
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildAttribute
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildAttribute.*
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildPerformanceMetric
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildTime
|
||||
import org.jetbrains.kotlin.build.report.metrics.measure
|
||||
import org.jetbrains.kotlin.build.report.warn
|
||||
import org.jetbrains.kotlin.cli.common.*
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
@@ -39,6 +36,7 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.incremental.parsing.classesFqNames
|
||||
import org.jetbrains.kotlin.incremental.util.BufferingMessageCollector
|
||||
import org.jetbrains.kotlin.incremental.util.reportException
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||
import org.jetbrains.kotlin.util.removeSuffixIfPresent
|
||||
@@ -100,6 +98,7 @@ abstract class IncrementalCompilerRunner<
|
||||
)
|
||||
}
|
||||
is ICResult.Failed -> {
|
||||
messageCollector.reportException(result.cause)
|
||||
reporter.warn {
|
||||
// The indentation after the first line is intentional (so that this message is distinct from next message)
|
||||
"""
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ class IncrementalJsCompilerRunner(
|
||||
if (!withAbiSnapshot && !buildHistoryFile.isFile) {
|
||||
return CompilationMode.Rebuild(BuildAttribute.NO_BUILD_HISTORY)
|
||||
}
|
||||
val lastBuildInfo = BuildInfo.read(lastBuildInfoFile)
|
||||
val lastBuildInfo = BuildInfo.read(lastBuildInfoFile, messageCollector) ?: return CompilationMode.Rebuild(BuildAttribute.INVALID_LAST_BUILD_INFO)
|
||||
|
||||
val dirtyFiles = DirtyFilesContainer(caches, reporter, kotlinSourceFilesExtensions)
|
||||
initDirtyFiles(dirtyFiles, changedFiles)
|
||||
|
||||
+6
-2
@@ -195,7 +195,7 @@ open class IncrementalJvmCompilerRunner(
|
||||
classpathAbiSnapshots: Map<String, AbiSnapshot>
|
||||
): CompilationMode {
|
||||
return try {
|
||||
calculateSourcesToCompileImpl(caches, changedFiles, args, classpathAbiSnapshots, withAbiSnapshot)
|
||||
calculateSourcesToCompileImpl(caches, changedFiles, args, messageCollector, classpathAbiSnapshots, withAbiSnapshot)
|
||||
} finally {
|
||||
psiFileProvider.messageCollector.flush(messageCollector)
|
||||
psiFileProvider.messageCollector.clear()
|
||||
@@ -238,6 +238,7 @@ open class IncrementalJvmCompilerRunner(
|
||||
caches: IncrementalJvmCachesManager,
|
||||
changedFiles: ChangedFiles.Known,
|
||||
args: K2JVMCompilerArguments,
|
||||
messageCollector: MessageCollector,
|
||||
abiSnapshots: Map<String, AbiSnapshot>,
|
||||
withAbiSnapshot: Boolean
|
||||
): CompilationMode {
|
||||
@@ -273,7 +274,10 @@ open class IncrementalJvmCompilerRunner(
|
||||
// workingDir as workingDir is an @OutputDirectory, so the files must be present in an incremental build.)
|
||||
return CompilationMode.Rebuild(BuildAttribute.NO_BUILD_HISTORY)
|
||||
}
|
||||
val lastBuildInfo = BuildInfo.read(lastBuildInfoFile)
|
||||
if (!lastBuildInfoFile.exists()) {
|
||||
return CompilationMode.Rebuild(BuildAttribute.NO_LAST_BUILD_INFO)
|
||||
}
|
||||
val lastBuildInfo = BuildInfo.read(lastBuildInfoFile, messageCollector) ?: return CompilationMode.Rebuild(BuildAttribute.INVALID_LAST_BUILD_INFO)
|
||||
reporter.debug { "Last Kotlin Build info -- $lastBuildInfo" }
|
||||
val scopes = caches.lookupCache.lookupSymbols.map { it.scope.ifBlank { it.name } }.distinct()
|
||||
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
package org.jetbrains.kotlin.incremental.util
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
|
||||
|
||||
internal fun MessageCollector.reportException(e: Throwable) {
|
||||
report(severity = CompilerMessageSeverity.EXCEPTION, message = "Incremental compilation failed:${e.message}\n${e.stackTraceToString()}")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user