diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt index b8e0ca800bd..e6a239e66b5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt @@ -38,7 +38,8 @@ import com.intellij.psi.PsiFile import com.intellij.util.ui.UIUtil import org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink import org.jetbrains.kotlin.psi.KtFile -import kotlin.script.experimental.dependencies.ScriptReport +import kotlin.script.experimental.api.ScriptDiagnostic +import kotlin.script.experimental.api.SourceCode class ScriptExternalHighlightingPass( private val file: KtFile, @@ -53,8 +54,8 @@ class ScriptExternalHighlightingPass( val reports = IdeScriptReportSink.getReports(file.virtualFile) - val annotations = reports.mapNotNull { (message, severity, position) -> - val (startOffset, endOffset) = position?.let { computeOffsets(document, position) } ?: 0 to 0 + val annotations = reports.mapNotNull { (message, severity, _ , location) -> + val (startOffset, endOffset) = location?.let { computeOffsets(document, it) } ?: 0 to 0 val annotation = Annotation( startOffset, endOffset, @@ -73,14 +74,14 @@ class ScriptExternalHighlightingPass( UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument!!, 0, file.textLength, infos, colorsScheme, id) } - private fun computeOffsets(document: Document, position: ScriptReport.Position): Pair { - val startLine = position.startLine.coerceLineIn(document) - val startOffset = document.offsetBy(startLine, position.startColumn) + private fun computeOffsets(document: Document, position: SourceCode.Location): Pair { + val startLine = position.start.line.coerceLineIn(document) + val startOffset = document.offsetBy(startLine, position.start.col) - val endLine = position.endLine?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine + val endLine = position.end?.line?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine val endOffset = document.offsetBy( endLine, - position.endColumn ?: document.getLineEndOffset(endLine) + position.end?.col ?: document.getLineEndOffset(endLine) ).coerceAtLeast(startOffset) return startOffset to endOffset @@ -92,13 +93,13 @@ class ScriptExternalHighlightingPass( return (getLineStartOffset(line) + col).coerceIn(getLineStartOffset(line), getLineEndOffset(line)) } - private fun ScriptReport.Severity.convertSeverity(): HighlightSeverity? { + private fun ScriptDiagnostic.Severity.convertSeverity(): HighlightSeverity? { return when (this) { - ScriptReport.Severity.FATAL -> ERROR - ScriptReport.Severity.ERROR -> ERROR - ScriptReport.Severity.WARNING -> WARNING - ScriptReport.Severity.INFO -> INFORMATION - ScriptReport.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null + ScriptDiagnostic.Severity.FATAL -> ERROR + ScriptDiagnostic.Severity.ERROR -> ERROR + ScriptDiagnostic.Severity.WARNING -> WARNING + ScriptDiagnostic.Severity.INFO -> INFORMATION + ScriptDiagnostic.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt.182 b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt.182 index 32afded53f8..9f7057e22b0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt.182 +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt.182 @@ -41,7 +41,8 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager import org.jetbrains.kotlin.idea.core.script.ScriptsCompilationConfigurationUpdater import org.jetbrains.kotlin.psi.KtFile -import kotlin.script.experimental.dependencies.ScriptReport +import kotlin.script.experimental.api.ScriptDiagnostic +import kotlin.script.experimental.api.SourceCode class ScriptExternalHighlightingPass( private val file: KtFile, @@ -74,8 +75,8 @@ class ScriptExternalHighlightingPass( val reports = IdeScriptReportSink.getReports(file.virtualFile) - val annotations = reports.mapNotNull { (message, severity, position) -> - val (startOffset, endOffset) = position?.let { computeOffsets(document, position) } ?: 0 to 0 + val annotations = reports.mapNotNull { (message, severity, _ , location) -> + val (startOffset, endOffset) = location?.let { computeOffsets(document, it) } ?: 0 to 0 val annotation = Annotation( startOffset, endOffset, @@ -94,14 +95,14 @@ class ScriptExternalHighlightingPass( UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument!!, 0, file.textLength, infos, colorsScheme, id) } - private fun computeOffsets(document: Document, position: ScriptReport.Position): Pair { - val startLine = position.startLine.coerceLineIn(document) - val startOffset = document.offsetBy(startLine, position.startColumn) + private fun computeOffsets(document: Document, position: SourceCode.Location): Pair { + val startLine = position.start.line.coerceLineIn(document) + val startOffset = document.offsetBy(startLine, position.start.col) - val endLine = position.endLine?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine + val endLine = position.end?.line?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine val endOffset = document.offsetBy( endLine, - position.endColumn ?: document.getLineEndOffset(endLine) + position.end?.col ?: document.getLineEndOffset(endLine) ).coerceAtLeast(startOffset) return startOffset to endOffset @@ -113,13 +114,13 @@ class ScriptExternalHighlightingPass( return (getLineStartOffset(line) + col).coerceIn(getLineStartOffset(line), getLineEndOffset(line)) } - private fun ScriptReport.Severity.convertSeverity(): HighlightSeverity? { + private fun ScriptDiagnostic.Severity.convertSeverity(): HighlightSeverity? { return when (this) { - ScriptReport.Severity.FATAL -> ERROR - ScriptReport.Severity.ERROR -> ERROR - ScriptReport.Severity.WARNING -> WARNING - ScriptReport.Severity.INFO -> INFORMATION - ScriptReport.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null + ScriptDiagnostic.Severity.FATAL -> ERROR + ScriptDiagnostic.Severity.ERROR -> ERROR + ScriptDiagnostic.Severity.WARNING -> WARNING + ScriptDiagnostic.Severity.INFO -> INFORMATION + ScriptDiagnostic.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null } } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/IdeScriptReportSink.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/IdeScriptReportSink.kt index 61148bc351c..42febbb2016 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/IdeScriptReportSink.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/IdeScriptReportSink.kt @@ -25,14 +25,14 @@ import com.intellij.psi.PsiManager import com.intellij.ui.EditorNotifications import org.jetbrains.kotlin.psi.UserDataProperty import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink -import kotlin.script.experimental.dependencies.ScriptReport +import kotlin.script.experimental.api.ScriptDiagnostic class IdeScriptReportSink(val project: Project) : ScriptReportSink { - override fun attachReports(scriptFile: VirtualFile, reports: List) { + override fun attachReports(scriptFile: VirtualFile, reports: List) { if (getReports(scriptFile) == reports) return // TODO: persist errors between launches? - scriptFile.scriptReports = reports + scriptFile.scriptDiagnostics = reports ApplicationManager.getApplication().invokeLater { if (scriptFile.isValid && !project.isDisposed) { @@ -45,10 +45,10 @@ class IdeScriptReportSink(val project: Project) : ScriptReportSink { } companion object { - fun getReports(file: VirtualFile): List { - return file.scriptReports ?: emptyList() + fun getReports(file: VirtualFile): List { + return file.scriptDiagnostics ?: emptyList() } - private var VirtualFile.scriptReports: List? by UserDataProperty(Key.create("KOTLIN_SCRIPT_REPORTS")) + private var VirtualFile.scriptDiagnostics: List? by UserDataProperty(Key.create("KOTLIN_SCRIPT_DIAGNOSTICS")) } } \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt index 69500989a23..7407e009384 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrap import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink import kotlin.script.experimental.api.ResultWithDiagnostics import kotlin.script.experimental.api.valueOrNull -import kotlin.script.experimental.jvm.compat.mapToLegacyReports // TODO: rename and provide alias for compatibility - this is not only about dependencies anymore abstract class ScriptDependenciesLoader(protected val project: Project) { @@ -77,7 +76,7 @@ abstract class ScriptDependenciesLoader(protected val project: Project) { } private fun attachReportsIfChanged(result: ResultWithDiagnostics<*>, file: VirtualFile) { - reporter.attachReports(file, result.reports.mapToLegacyReports()) + reporter.attachReports(file, result.reports) } private fun save(compilationConfigurationResult: ScriptCompilationConfigurationResult?, file: VirtualFile) { diff --git a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptReportSink.kt b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptReportSink.kt index e9e1e70068d..cc82a3a89aa 100644 --- a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptReportSink.kt +++ b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptReportSink.kt @@ -17,8 +17,8 @@ package org.jetbrains.kotlin.scripting.resolve import com.intellij.openapi.vfs.VirtualFile -import kotlin.script.experimental.dependencies.ScriptReport +import kotlin.script.experimental.api.ScriptDiagnostic interface ScriptReportSink { - fun attachReports(scriptFile: VirtualFile, reports: List) + fun attachReports(scriptFile: VirtualFile, reports: List) } \ No newline at end of file diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDependenciesProvider.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDependenciesProvider.kt index f5d14313e6e..5ef92597d6e 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDependenciesProvider.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptDependenciesProvider.kt @@ -39,7 +39,7 @@ class CliScriptDependenciesProvider(private val project: Project) : ScriptDepend if (scriptDef != null) { val result = refineScriptCompilationConfiguration(VirtualFileScriptSource(file), scriptDef, project) - ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports.mapToLegacyReports()) + ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports) if (result is ResultWithDiagnostics.Success) { log.info("[kts] new cached deps for $path: ${result.value.dependenciesClassPath.joinToString(File.pathSeparator)}") diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptReportSink.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptReportSink.kt index c7ad07f05fe..f059b86cc96 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptReportSink.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/definitions/CliScriptReportSink.kt @@ -10,27 +10,28 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink -import kotlin.script.experimental.dependencies.ScriptReport +import kotlin.script.experimental.api.ScriptDiagnostic +import kotlin.script.experimental.api.SourceCode internal class CliScriptReportSink(private val messageCollector: MessageCollector) : ScriptReportSink { - override fun attachReports(scriptFile: VirtualFile, reports: List) { + override fun attachReports(scriptFile: VirtualFile, reports: List) { reports.forEach { - messageCollector.report(it.severity.convertSeverity(), it.message, location(scriptFile, it.position)) + messageCollector.report(it.severity.convertSeverity(), it.message, location(scriptFile, it.location)) } } - private fun location(scriptFile: VirtualFile, position: ScriptReport.Position?): CompilerMessageLocation? { - if (position == null) return CompilerMessageLocation.create(scriptFile.path) + private fun location(scriptFile: VirtualFile, location: SourceCode.Location?): CompilerMessageLocation? { + if (location == null) return CompilerMessageLocation.create(scriptFile.path) - return CompilerMessageLocation.create(scriptFile.path, position.startLine, position.startColumn, null) + return CompilerMessageLocation.create(scriptFile.path, location.start.line, location.start.col, null) } - private fun ScriptReport.Severity.convertSeverity(): CompilerMessageSeverity = when (this) { - ScriptReport.Severity.FATAL -> CompilerMessageSeverity.ERROR - ScriptReport.Severity.ERROR -> CompilerMessageSeverity.ERROR - ScriptReport.Severity.WARNING -> CompilerMessageSeverity.WARNING - ScriptReport.Severity.INFO -> CompilerMessageSeverity.INFO - ScriptReport.Severity.DEBUG -> CompilerMessageSeverity.LOGGING + private fun ScriptDiagnostic.Severity.convertSeverity(): CompilerMessageSeverity = when (this) { + ScriptDiagnostic.Severity.FATAL -> CompilerMessageSeverity.ERROR + ScriptDiagnostic.Severity.ERROR -> CompilerMessageSeverity.ERROR + ScriptDiagnostic.Severity.WARNING -> CompilerMessageSeverity.WARNING + ScriptDiagnostic.Severity.INFO -> CompilerMessageSeverity.INFO + ScriptDiagnostic.Severity.DEBUG -> CompilerMessageSeverity.LOGGING } }