diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/activities/ContinuePluginStartupActivity.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/activities/ContinuePluginStartupActivity.kt index 501a56bc398..d3425b1a9cf 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/activities/ContinuePluginStartupActivity.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/activities/ContinuePluginStartupActivity.kt @@ -51,7 +51,7 @@ fun showTutorial(project: Project) { if (`is` == null) { throw IOException("Resource not found: $tutorialFileName") } - var content = StreamUtil.readText(`is`, StandardCharsets.UTF_8) + var content = `is`.bufferedReader(StandardCharsets.UTF_8).use { it.readText() } // All jetbrains will use J instead of L content = content.replace("[Cmd + L]", "[Cmd + J]") @@ -95,7 +95,7 @@ class ContinuePluginStartupActivity : StartupActivity, DumbAware { } private fun getPlatformSpecificKeyStroke(key: String): String { - val osName = System.getProperty("os.name").toLowerCase() + val osName = System.getProperty("os.name").lowercase() val modifier = if (osName.contains("mac")) "meta" else "control" return "$modifier $key" } diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/browser/ContinueBrowser.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/browser/ContinueBrowser.kt index 836ad0cb1e7..914a87f0949 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/browser/ContinueBrowser.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/browser/ContinueBrowser.kt @@ -88,7 +88,7 @@ class ContinueBrowser( val json = gsonService.gson.toJson(BrowserMessage(messageType, messageId, data)) val jsCode = """window.postMessage($json, "*");""" try { - browser.executeJavaScriptAsync(jsCode) + browser.cefBrowser.executeJavaScript(jsCode, getGuiUrl(), 0) } catch (error: IllegalStateException) { log.warn(error) } diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigJsonSchemaProviderFactory.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigJsonSchemaProviderFactory.kt index 677506f6e6f..4d747323933 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigJsonSchemaProviderFactory.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigJsonSchemaProviderFactory.kt @@ -35,7 +35,7 @@ class ConfigJsonSchemaFileProvider : JsonSchemaFileProvider { if (`is` == null) { throw IOException("Resource not found: config_schema.json") } - val content = StreamUtil.readText(`is`, StandardCharsets.UTF_8) + val content = `is`.bufferedReader(StandardCharsets.UTF_8).use { it.readText() } val filepath = Paths.get(getContinueGlobalPath(), "config_schema.json").toString() File(filepath).writeText(content) return LocalFileSystem.getInstance().findFileByPath(filepath) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigRcJsonSchemaProviderFactory.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigRcJsonSchemaProviderFactory.kt index 76e16620249..8d2ea7a5cb3 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigRcJsonSchemaProviderFactory.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/ConfigRcJsonSchemaProviderFactory.kt @@ -35,7 +35,7 @@ class ConfigRcJsonSchemaFileProvider : JsonSchemaFileProvider { if (`is` == null) { throw IOException("Resource not found: continue_rc_schema.json") } - val content = StreamUtil.readText(`is`, StandardCharsets.UTF_8) + val content = `is`.bufferedReader(StandardCharsets.UTF_8).use { it.readText() } val filepath = Paths.get(getContinueGlobalPath(), "continue_rc_schema.json").toString() File(filepath).writeText(content) return LocalFileSystem.getInstance().findFileByPath(filepath) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessenger.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessenger.kt index f313e5f4381..3821d3466d8 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessenger.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessenger.kt @@ -64,7 +64,8 @@ class CoreMessenger( // Responses for messageId responseListeners[messageId]?.let { listener -> listener(data) - val done = (data as Map)["done"] + @Suppress("UNCHECKED_CAST") + val done = (data as? Map)?.get("done") if (done == true) { responseListeners.remove(messageId) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IntelliJIde.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IntelliJIde.kt index 7d6eaedab87..19e236465a2 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IntelliJIde.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IntelliJIde.kt @@ -33,7 +33,7 @@ import com.intellij.psi.PsiDocumentManager import com.intellij.testFramework.LightVirtualFile import kotlinx.coroutines.* import org.jetbrains.plugins.terminal.ShellTerminalWidget -import org.jetbrains.plugins.terminal.TerminalView +import org.jetbrains.plugins.terminal.TerminalToolWindowManager import java.awt.Toolkit import java.awt.datatransfer.DataFlavor import java.io.BufferedReader @@ -204,10 +204,10 @@ class IntelliJIDE( try { val toolWindow = ToolWindowManager.getInstance(project).getToolWindow("Terminal") - val terminalView = TerminalView.getInstance(project) + val terminalManager = TerminalToolWindowManager.getInstance(project) // Find the first terminal widget selected, whatever its state, running command or not. - val widget = terminalView.getWidgets().filterIsInstance().firstOrNull { - toolWindow?.getContentManager()?.getContent(it)?.isSelected ?: false + val widget = terminalManager.getWidgets().filterIsInstance().firstOrNull { + toolWindow?.contentManager?.getContent(it)?.isSelected ?: false } if (widget != null) { @@ -284,23 +284,23 @@ class IntelliJIDE( val toolWindow = ToolWindowManager.getInstance(project).getToolWindow("Terminal") toolWindow?.activate({ try { - val terminalView = TerminalView.getInstance(project) + val terminalManager = TerminalToolWindowManager.getInstance(project) var widget: ShellTerminalWidget? = null // 1. Handle reuseTerminal option - if (terminalOptions.reuseTerminal == true && terminalView.getWidgets().isNotEmpty()) { + if (terminalOptions.reuseTerminal == true && terminalManager.getWidgets().isNotEmpty()) { // 2. Find by terminalName if provided if (terminalOptions.terminalName != null) { - widget = terminalView.getWidgets().filterIsInstance() + widget = terminalManager.getWidgets().filterIsInstance() .firstOrNull { toolWindow.contentManager.getContent(it).tabName == terminalOptions.terminalName && !it.hasRunningCommands() } } else { // 3. Find active terminal, or fall back to the first one - widget = terminalView.getWidgets().filterIsInstance() + widget = terminalManager.getWidgets().filterIsInstance() .firstOrNull { toolWindow.contentManager.getContent(it).isSelected } - ?: terminalView.getWidgets().filterIsInstance().firstOrNull { + ?: terminalManager.getWidgets().filterIsInstance().firstOrNull { !it.hasRunningCommands() } } @@ -308,7 +308,7 @@ class IntelliJIDE( // 4. Create a new terminal if needed if (widget == null) { - widget = terminalView.createLocalShellWidget( + widget = terminalManager.createLocalShellWidget( project.basePath, terminalOptions.terminalName, true diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/EditorComponentInlaysManager.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/EditorComponentInlaysManager.kt index b4f099d2df0..e990b227f77 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/EditorComponentInlaysManager.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/EditorComponentInlaysManager.kt @@ -43,7 +43,12 @@ class EditorComponentInlaysManager(val editor: EditorImpl, private val onlyOneIn @RequiresEdt fun insert(lineIndex: Int, component: JComponent, showAbove: Boolean = false): Disposable? { - if (Disposer.isDisposed(this)) return null + try { + // Check if editor is disposed + if (editor.isDisposed) return null + } catch (e: Exception) { + return null + } if (onlyOneInlay) { // Dispose all other inlays @@ -106,7 +111,7 @@ class EditorComponentInlaysManager(val editor: EditorImpl, private val onlyOneIn init { val metrics = editor.getFontMetrics(Font.PLAIN) - val spaceWidth = FontLayoutService.getInstance().charWidth2D(metrics, ' '.toInt()) + val spaceWidth = FontLayoutService.getInstance().charWidth2D(metrics, ' '.code) // -4 to create some space maximumEditorTextWidth = ceil(spaceWidth * (editor.settings.getRightMargin(editor.project)) - 4).toInt() diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/nextEdit/NextEditService.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/nextEdit/NextEditService.kt index ef7ecb8a84c..93ed8552617 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/nextEdit/NextEditService.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/nextEdit/NextEditService.kt @@ -218,7 +218,9 @@ class ContinueNextEditService(private val project: Project) : NextEditService { private fun parseNextEditOutcome(response: Any?): NextEditOutcome? { return try { + @Suppress("UNCHECKED_CAST") val responseMap = response as? Map ?: return null + @Suppress("UNCHECKED_CAST") val contentMap = responseMap["content"] as? Map ?: return null parseNextEditOutcomeFromMap(contentMap) @@ -231,6 +233,7 @@ class ContinueNextEditService(private val project: Project) : NextEditService { private fun parseNextEditOutcomeFromMap(contentMap: Map): NextEditOutcome? { return try { // Extract position data + @Suppress("UNCHECKED_CAST") val cursorPos = contentMap["cursorPosition"] as? Map val cursorPosition = if (cursorPos != null) { Position( @@ -241,6 +244,7 @@ class ContinueNextEditService(private val project: Project) : NextEditService { Position(0, 0) } + @Suppress("UNCHECKED_CAST") val finalCursorPos = contentMap["finalCursorPosition"] as? Map val finalCursorPosition = if (finalCursorPos != null) { Position( @@ -252,6 +256,7 @@ class ContinueNextEditService(private val project: Project) : NextEditService { } // Extract diffLines + @Suppress("UNCHECKED_CAST") val diffLinesRaw = contentMap["diffLines"] as? List> ?: emptyList() val diffLines = diffLinesRaw.map { diffLineMap -> DiffLine( @@ -313,15 +318,21 @@ class ContinueNextEditService(private val project: Project) : NextEditService { private fun parseProcessedItem(response: Any?): ProcessedItem? { return try { + @Suppress("UNCHECKED_CAST") val responseMap = response as? Map ?: return null - val content = responseMap["content"] as Map ?: return null + @Suppress("UNCHECKED_CAST") + val content = responseMap["content"] as? Map ?: return null // Parse location (RangeInFile) + @Suppress("UNCHECKED_CAST") val locationMap = content["location"] as? Map ?: return null val filepath = locationMap["filepath"] as? String ?: return null + @Suppress("UNCHECKED_CAST") val rangeMap = locationMap["range"] as? Map ?: return null + @Suppress("UNCHECKED_CAST") val startMap = rangeMap["start"] as? Map ?: return null + @Suppress("UNCHECKED_CAST") val endMap = rangeMap["end"] as? Map ?: return null val startPosition = Position( @@ -338,6 +349,7 @@ class ContinueNextEditService(private val project: Project) : NextEditService { val location = com.github.continuedev.continueintellijextension.RangeInFile(filepath, range) // Parse outcome (NextEditOutcome) - reuse existing logic from parseNextEditOutcome + @Suppress("UNCHECKED_CAST") val outcomeData = content["outcome"] as? Map ?: return null val outcome = parseNextEditOutcomeFromMap(outcomeData) ?: return null diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Paths.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Paths.kt index 1414fbcaf73..14b4eb10a0a 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Paths.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Paths.kt @@ -1,6 +1,6 @@ package com.github.continuedev.continueintellijextension.utils -import com.intellij.ide.plugins.PluginManager +import com.intellij.ide.plugins.PluginManagerCore import com.intellij.openapi.extensions.PluginId import com.github.continuedev.continueintellijextension.constants.ContinueConstants import java.nio.file.Path @@ -14,7 +14,7 @@ import java.nio.file.Paths */ fun getContinuePluginPath(): Path { val pluginDescriptor = - PluginManager.getPlugin(PluginId.getId(ContinueConstants.PLUGIN_ID)) ?: throw Exception("Plugin not found") + PluginManagerCore.getPlugin(PluginId.getId(ContinueConstants.PLUGIN_ID)) ?: throw Exception("Plugin not found") return pluginDescriptor.pluginPath }