Minor: unify logging in scripting

This commit is contained in:
Natalia Selezneva
2020-07-23 00:19:58 +03:00
parent 8a6cdcba29
commit 8d894929ae
13 changed files with 50 additions and 54 deletions
@@ -241,7 +241,7 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
} catch (t: Throwable) { } catch (t: Throwable) {
if (t is ControlFlowException) throw t if (t is ControlFlowException) throw t
// reporting failed loading only once // reporting failed loading only once
LOG.error("[kts] cannot load script definitions using $this", t) scriptingErrorLog("[kts] cannot load script definitions using $this", t)
failedContributorsHashes.add(this@safeGetDefinitions.hashCode()) failedContributorsHashes.add(this@safeGetDefinitions.hashCode())
} }
return emptyList() return emptyList()
@@ -266,7 +266,7 @@ fun loadDefinitionsFromTemplates(
additionalResolverClasspath: List<File> = emptyList() additionalResolverClasspath: List<File> = emptyList()
): List<ScriptDefinition> { ): List<ScriptDefinition> {
val classpath = templateClasspath + additionalResolverClasspath val classpath = templateClasspath + additionalResolverClasspath
LOG.info("[kts] loading script definitions $templateClassNames using cp: ${classpath.joinToString(File.pathSeparator)}") scriptingInfoLog("Loading script definitions $templateClassNames using cp: ${classpath.joinToString(File.pathSeparator)}")
val baseLoader = ScriptDefinitionContributor::class.java.classLoader val baseLoader = ScriptDefinitionContributor::class.java.classLoader
val loader = if (classpath.isEmpty()) baseLoader else URLClassLoader(classpath.map { it.toURI().toURL() }.toTypedArray(), baseLoader) val loader = if (classpath.isEmpty()) baseLoader else URLClassLoader(classpath.map { it.toURI().toURL() }.toTypedArray(), baseLoader)
@@ -286,24 +286,24 @@ fun loadDefinitionsFromTemplates(
ScriptDefinition.FromTemplate(hostConfiguration, template, ScriptDefinition::class) ScriptDefinition.FromTemplate(hostConfiguration, template, ScriptDefinition::class)
} }
else -> { else -> {
LOG.warn("[kts] cannot find a valid script definition annotation on the class $template") scriptingWarnLog("Cannot find a valid script definition annotation on the class $template")
null null
} }
} }
} catch (e: ClassNotFoundException) { } catch (e: ClassNotFoundException) {
// Assuming that direct ClassNotFoundException is the result of versions mismatch and missing subsystems, e.g. gradle // Assuming that direct ClassNotFoundException is the result of versions mismatch and missing subsystems, e.g. gradle
// so, it only results in warning, while other errors are severe misconfigurations, resulting it user-visible error // so, it only results in warning, while other errors are severe misconfigurations, resulting it user-visible error
LOG.warn("[kts] cannot load script definition class $templateClassName") scriptingWarnLog("Cannot load script definition class $templateClassName")
null null
} catch (e: Throwable) { } catch (e: Throwable) {
if (e is ControlFlowException) throw e if (e is ControlFlowException) throw e
val message = "[kts] cannot load script definition class $templateClassName" val message = "Cannot load script definition class $templateClassName"
val thirdPartyPlugin = PluginManagerCore.getPluginByClassName(templateClassName) val thirdPartyPlugin = PluginManagerCore.getPluginByClassName(templateClassName)
if (thirdPartyPlugin != null) { if (thirdPartyPlugin != null) {
LOG.error(PluginException(message, e, thirdPartyPlugin)) scriptingErrorLog(message, PluginException(message, e, thirdPartyPlugin))
} else { } else {
LOG.error(message, e) scriptingErrorLog(message, e)
} }
null null
} }
@@ -263,7 +263,7 @@ class DefaultScriptingSupport(manager: CompositeScriptConfigurationManager) : De
forceSkipNotification: Boolean forceSkipNotification: Boolean
) { ) {
saveLock.withLock { saveLock.withLock {
debug(file) { "configuration received = $newResult" } scriptingDebugLog(file) { "configuration received = $newResult" }
setLoadedConfiguration(file, newResult) setLoadedConfiguration(file, newResult)
@@ -290,7 +290,7 @@ class DefaultScriptingSupport(manager: CompositeScriptConfigurationManager) : De
saveReports(file, newResult.reports) saveReports(file, newResult.reports)
setAppliedConfiguration(file, newResult, syncUpdate = true) setAppliedConfiguration(file, newResult, syncUpdate = true)
} else { } else {
debug(file) { scriptingDebugLog(file) {
"configuration changed, notification is shown: old = $oldConfiguration, new = $newConfiguration" "configuration changed, notification is shown: old = $oldConfiguration, new = $newConfiguration"
} }
@@ -321,7 +321,7 @@ class DefaultScriptingSupport(manager: CompositeScriptConfigurationManager) : De
) { ) {
val oldReports = IdeScriptReportSink.getReports(file) val oldReports = IdeScriptReportSink.getReports(file)
if (oldReports != newReports) { if (oldReports != newReports) {
debug(file) { "new script reports = $newReports" } scriptingDebugLog(file) { "new script reports = $newReports" }
ServiceManager.getService(project, ScriptReportSink::class.java).attachReports(file, newReports) ServiceManager.getService(project, ScriptReportSink::class.java).attachReports(file, newReports)
@@ -502,7 +502,7 @@ abstract class DefaultScriptingSupportBase(val manager: CompositeScriptConfigura
) { ) {
manager.updater.checkInTransaction() manager.updater.checkInTransaction()
val newConfiguration = newConfigurationSnapshot?.configuration val newConfiguration = newConfigurationSnapshot?.configuration
debug(file) { "configuration changed = $newConfiguration" } scriptingDebugLog(file) { "configuration changed = $newConfiguration" }
if (newConfiguration != null) { if (newConfiguration != null) {
cache.setApplied(file, newConfigurationSnapshot) cache.setApplied(file, newConfigurationSnapshot)
@@ -9,7 +9,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoader import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoader
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoadingContext import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoadingContext
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.scriptingDebugLog
import org.jetbrains.kotlin.idea.core.util.cachedFileAttribute import org.jetbrains.kotlin.idea.core.util.cachedFileAttribute
import org.jetbrains.kotlin.idea.core.util.readObject import org.jetbrains.kotlin.idea.core.util.readObject
import org.jetbrains.kotlin.idea.core.util.writeObject import org.jetbrains.kotlin.idea.core.util.writeObject
@@ -55,7 +55,7 @@ internal class ScriptConfigurationFileAttributeCache(
virtualFile: VirtualFile virtualFile: VirtualFile
): ScriptConfigurationSnapshotForFS? { ): ScriptConfigurationSnapshotForFS? {
val configurationSnapshot = virtualFile.scriptConfigurationSnapshot ?: return null val configurationSnapshot = virtualFile.scriptConfigurationSnapshot ?: return null
debug(virtualFile) { "configuration from fileAttributes = $configurationSnapshot" } scriptingDebugLog(virtualFile) { "configuration from fileAttributes = $configurationSnapshot" }
val configuration = configurationSnapshot.configuration ?: return null val configuration = configurationSnapshot.configuration ?: return null
@@ -73,7 +73,7 @@ internal class ScriptConfigurationFileAttributeCache(
if (it.exists()) { if (it.exists()) {
true true
} else { } else {
debug(file) { scriptingDebugLog(file) {
"classpath root saved to file attribute doesn't exist: ${it.path}" "classpath root saved to file attribute doesn't exist: ${it.path}"
} }
false false
@@ -8,15 +8,13 @@ package org.jetbrains.kotlin.idea.core.script.configuration.loader
import com.intellij.openapi.diagnostic.ControlFlowException import com.intellij.openapi.diagnostic.ControlFlowException
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.scriptingDebugLog
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.runReadAction
import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource
import org.jetbrains.kotlin.scripting.resolve.LegacyResolverWrapper import org.jetbrains.kotlin.scripting.resolve.LegacyResolverWrapper
import org.jetbrains.kotlin.scripting.resolve.refineScriptCompilationConfiguration import org.jetbrains.kotlin.scripting.resolve.refineScriptCompilationConfiguration
@@ -57,7 +55,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
vFile: VirtualFile, vFile: VirtualFile,
scriptDefinition: ScriptDefinition scriptDefinition: ScriptDefinition
): ScriptConfigurationSnapshot { ): ScriptConfigurationSnapshot {
debug(file) { "start dependencies loading" } scriptingDebugLog(file) { "start dependencies loading" }
val inputs = getInputsStamp(vFile, file) val inputs = getInputsStamp(vFile, file)
val scriptingApiResult = try { val scriptingApiResult = try {
@@ -76,7 +74,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
scriptingApiResult.valueOrNull() scriptingApiResult.valueOrNull()
) )
debug(file) { "finish dependencies loading" } scriptingDebugLog(file) { "finish dependencies loading" }
return result return result
} }
@@ -13,7 +13,9 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.util.Alarm import com.intellij.util.Alarm
import com.intellij.util.containers.HashSetQueue import com.intellij.util.containers.HashSetQueue
import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.configuration.utils.DefaultBackgroundExecutor.Companion.PROGRESS_INDICATOR_DELAY
import org.jetbrains.kotlin.idea.core.script.configuration.utils.DefaultBackgroundExecutor.Companion.PROGRESS_INDICATOR_MIN_QUEUE
import org.jetbrains.kotlin.idea.core.script.scriptingDebugLog
import org.jetbrains.kotlin.idea.core.util.KotlinIdeaCoreBundle import org.jetbrains.kotlin.idea.core.util.KotlinIdeaCoreBundle
import java.util.* import java.util.*
import javax.swing.SwingUtilities import javax.swing.SwingUtilities
@@ -72,7 +74,7 @@ internal class DefaultBackgroundExecutor(
val task = LoadTask(key, actions) val task = LoadTask(key, actions)
if (queue.add(task)) { if (queue.add(task)) {
debug(task.key) { "added to update queue" } scriptingDebugLog(task.key) { "added to update queue" }
// If the queue is longer than PROGRESS_INDICATOR_MIN_QUEUE, show progress and cancel button // If the queue is longer than PROGRESS_INDICATOR_MIN_QUEUE, show progress and cancel button
if (queue.size > PROGRESS_INDICATOR_MIN_QUEUE) { if (queue.size > PROGRESS_INDICATOR_MIN_QUEUE) {
@@ -18,14 +18,26 @@ var Application.isScriptChangesNotifierDisabled by NotNullableUserDataProperty(
true true
) )
internal val LOG = Logger.getInstance("#org.jetbrains.kotlin.idea.script") private val logger = Logger.getInstance("#org.jetbrains.kotlin.idea.script")
internal fun debug(file: KtFile, message: () -> String) { fun scriptingDebugLog(file: KtFile, message: () -> String) {
debug(file.originalFile.virtualFile, message) scriptingDebugLog(file.originalFile.virtualFile, message)
} }
internal fun debug(file: VirtualFile? = null, message: () -> String) { fun scriptingDebugLog(file: VirtualFile? = null, message: () -> String) {
if (LOG.isDebugEnabled) { if (logger.isDebugEnabled) {
LOG.debug("[KOTLIN SCRIPT] ${file?.let { file.path + " "} ?: ""}" + message()) logger.debug("[KOTLIN_SCRIPTING] ${file?.let { file.path + " "} ?: ""}" + message())
} }
}
fun scriptingInfoLog(message: String) {
logger.info("[KOTLIN_SCRIPTING] $message")
}
fun scriptingWarnLog(message: String) {
logger.warn("[KOTLIN_SCRIPTING] $message")
}
fun scriptingErrorLog(message: String, throwable: Throwable?) {
logger.error("[KOTLIN_SCRIPTING] $message", throwable)
} }
@@ -25,7 +25,7 @@ import kotlinx.coroutines.launch
import org.jetbrains.kotlin.idea.core.script.KotlinScriptDependenciesClassFinder import org.jetbrains.kotlin.idea.core.script.KotlinScriptDependenciesClassFinder
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.scriptingDebugLog
import org.jetbrains.kotlin.idea.core.util.EDT import org.jetbrains.kotlin.idea.core.util.EDT
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.application.runWriteAction
@@ -226,7 +226,7 @@ abstract class ScriptClassRootsUpdater(
runWriteAction { runWriteAction {
if (project.isDisposed) return@runWriteAction if (project.isDisposed) return@runWriteAction
debug { "roots change event" } scriptingDebugLog { "roots change event" }
ProjectRootManagerEx.getInstanceEx(project)?.makeRootsChange(EmptyRunnable.getInstance(), false, true) ProjectRootManagerEx.getInstanceEx(project)?.makeRootsChange(EmptyRunnable.getInstance(), false, true)
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount() ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
@@ -11,8 +11,8 @@ import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtil
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
import org.jetbrains.kotlin.idea.core.script.LOG
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsStorage import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsStorage
import org.jetbrains.kotlin.idea.core.script.scriptingWarnLog
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import java.io.File import java.io.File
@@ -77,7 +77,7 @@ class ScriptSdksBuilder(
return anyJavaSdk return anyJavaSdk
} }
LOG.warn( scriptingWarnLog(
"Default Script SDK is null: " + "Default Script SDK is null: " +
"projectSdk = ${ProjectRootManager.getInstance(project).projectSdk}, " + "projectSdk = ${ProjectRootManager.getInstance(project).projectSdk}, " +
"all sdks = ${getAllProjectSdks().joinToString("\n")}" "all sdks = ${getAllProjectSdks().joinToString("\n")}"
@@ -12,10 +12,7 @@ import com.intellij.util.EnvironmentUtil
import com.intellij.util.PathUtil import com.intellij.util.PathUtil
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor import org.jetbrains.kotlin.idea.core.script.*
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionSourceAsContributor
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager
import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager
import org.jetbrains.kotlin.idea.scripting.gradle.roots.Imported import org.jetbrains.kotlin.idea.scripting.gradle.roots.Imported
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.scripting.gradle
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.newvfs.FileAttribute import com.intellij.openapi.vfs.newvfs.FileAttribute
import org.jetbrains.kotlin.idea.core.script.scriptingErrorLog
import org.jetbrains.kotlin.idea.core.util.readNullable import org.jetbrains.kotlin.idea.core.util.readNullable
import org.jetbrains.kotlin.idea.core.util.readStringList import org.jetbrains.kotlin.idea.core.util.readStringList
import org.jetbrains.kotlin.idea.core.util.writeNullable import org.jetbrains.kotlin.idea.core.util.writeNullable
@@ -8,12 +8,11 @@ package org.jetbrains.kotlin.idea.scripting.gradle.roots
import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.core.script.scriptingDebugLog
import org.jetbrains.kotlin.idea.core.script.ucache.ScriptClassRootsBuilder import org.jetbrains.kotlin.idea.core.script.ucache.ScriptClassRootsBuilder
import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsContributor import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsContributor
import org.jetbrains.kotlin.idea.scripting.gradle.LastModifiedFiles import org.jetbrains.kotlin.idea.scripting.gradle.LastModifiedFiles
import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslScriptModel import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslScriptModel
import org.jetbrains.kotlin.idea.scripting.gradle.scriptingDebugLog
import org.jetbrains.kotlin.idea.scripting.gradle.scriptingErrorLog
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
@@ -21,6 +21,9 @@ import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSupport import org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSupport
import org.jetbrains.kotlin.idea.core.script.configuration.ScriptingSupport import org.jetbrains.kotlin.idea.core.script.configuration.ScriptingSupport
import org.jetbrains.kotlin.idea.core.script.scriptingDebugLog
import org.jetbrains.kotlin.idea.core.script.scriptingErrorLog
import org.jetbrains.kotlin.idea.core.script.scriptingInfoLog
import org.jetbrains.kotlin.idea.core.script.ucache.ScriptClassRootsBuilder import org.jetbrains.kotlin.idea.core.script.ucache.ScriptClassRootsBuilder
import org.jetbrains.kotlin.idea.core.util.EDT import org.jetbrains.kotlin.idea.core.util.EDT
import org.jetbrains.kotlin.idea.scripting.gradle.* import org.jetbrains.kotlin.idea.scripting.gradle.*
@@ -76,20 +76,4 @@ fun kotlinDslScriptsModelImportSupported(currentGradleVersion: String): Boolean
} }
fun getGradleProjectSettings(project: Project): Collection<GradleProjectSettings> = fun getGradleProjectSettings(project: Project): Collection<GradleProjectSettings> =
(ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) as GradleSettings).linkedProjectsSettings (ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) as GradleSettings).linkedProjectsSettings
private val logger = Logger.getInstance("#org.jetbrains.kotlin.idea.scripting.gradle")
fun scriptingDebugLog(message: () -> String) {
if (logger.isDebugEnabled) {
logger.debug("[KOTLIN_GRADLE_DSL] ${message()}")
}
}
fun scriptingInfoLog(message: String) {
logger.info("[KOTLIN_GRADLE_DSL] $message")
}
fun scriptingErrorLog(message: String, throwable: Throwable?) {
logger.error("[KOTLIN_GRADLE_DSL] $message", throwable)
}