From b5460f7e5878ac2c4a250381ba959d3e4b2ae28f Mon Sep 17 00:00:00 2001 From: marcin Date: Wed, 11 Dec 2024 11:06:16 +0000 Subject: [PATCH 1/3] ref: Do not use internal API for icon badge (#207) * Do not use internal API --- .../vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt | 3 ++- .../kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt | 9 ++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt index c6ad0d1..827e310 100644 --- a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt +++ b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarInfoPopupPanel.kt @@ -4,6 +4,7 @@ import com.intellij.icons.AllIcons import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.intellij.openapi.ui.DialogPanel +import com.intellij.ui.NewUiValue import com.intellij.ui.components.JBLabel import com.intellij.util.ui.JBEmptyBorder import com.intellij.util.ui.JBFont @@ -86,7 +87,7 @@ class VaadinStatusBarInfoPopupPanel(private val project: Project) : JPanel() { private fun createDescription(text: String): JComponent { val desc = JLabel(text) - desc.font = JBFont.smallOrNewUiMedium() + desc.font = if (NewUiValue.isEnabled()) JBFont.medium() else JBFont.small() desc.foreground = UIUtil.getLabelInfoForeground() return desc diff --git a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt index 05c8211..568c28f 100644 --- a/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt +++ b/src/main/kotlin/com/vaadin/plugin/ui/VaadinStatusBarWidget.kt @@ -4,9 +4,10 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.ui.popup.JBPopupFactory import com.intellij.openapi.wm.StatusBarWidget import com.intellij.openapi.wm.WindowManager -import com.intellij.ui.BadgeIconSupplier +import com.intellij.ui.IconManager import com.intellij.ui.awt.RelativePoint import com.intellij.util.Consumer +import com.intellij.util.ui.JBUI.CurrentTheme.IconBadge import com.vaadin.plugin.copilot.CopilotPluginUtil import com.vaadin.plugin.utils.VaadinIcons import com.vaadin.plugin.utils.hasEndpoints @@ -23,8 +24,6 @@ class VaadinStatusBarWidget(private val project: Project) : StatusBarWidget, Sta } } - private val iconSupplier: BadgeIconSupplier = BadgeIconSupplier(VaadinIcons.VAADIN) - override fun ID(): String { return ID } @@ -57,9 +56,9 @@ class VaadinStatusBarWidget(private val project: Project) : StatusBarWidget, Sta override fun getIcon(): Icon { if (!CopilotPluginUtil.isActive(project) || !hasEndpoints()) { - return iconSupplier.warningIcon + return IconManager.getInstance().withIconBadge(VaadinIcons.VAADIN, IconBadge.WARNING) } - return iconSupplier.originalIcon + return VaadinIcons.VAADIN } } From 1895111995ae5cbdf0ed4414e64df2882bfcad62 Mon Sep 17 00:00:00 2001 From: marcin Date: Wed, 11 Dec 2024 11:11:04 +0000 Subject: [PATCH 2/3] Do not try to create .idea directory when not saving .copilot-plugin (#209) Fixes: #205 --- .../plugin/copilot/CopilotPluginUtil.kt | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt b/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt index 2372f51..62f3237 100644 --- a/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt +++ b/src/main/kotlin/com/vaadin/plugin/copilot/CopilotPluginUtil.kt @@ -19,6 +19,7 @@ import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.vfs.findDirectory import com.intellij.openapi.vfs.findFile import com.intellij.openapi.vfs.findOrCreateDirectory import com.vaadin.plugin.copilot.handler.GetModulePathsHandler @@ -120,24 +121,24 @@ class CopilotPluginUtil { } private fun saveDotFileInternal(project: Project) { - val dotFileDirectory = getDotFileDirectory(project) - if (dotFileDirectory != null) { - val props = Properties() - props.setProperty("endpoint", RestUtil.getEndpoint()) - props.setProperty("ide", "intellij") - props.setProperty("version", pluginVersion) - props.setProperty("supportedActions", HANDLERS.entries.joinToString(",") { a -> a.command }) + runInEdt { + WriteAction.run { + val dotFileDirectory = getDotFileDirectory(project, true) + if (dotFileDirectory != null) { + val props = Properties() + props.setProperty("endpoint", RestUtil.getEndpoint()) + props.setProperty("ide", "intellij") + props.setProperty("version", pluginVersion) + props.setProperty("supportedActions", HANDLERS.entries.joinToString(",") { a -> a.command }) - val stringWriter = StringWriter() - val bufferedWriter = - object : BufferedWriter(stringWriter) { - override fun newLine() { - write(NORMALIZED_LINE_SEPARATOR) - } - } - props.store(bufferedWriter, "Vaadin Copilot Integration Runtime Properties") - runInEdt { - WriteAction.run { + val stringWriter = StringWriter() + val bufferedWriter = + object : BufferedWriter(stringWriter) { + override fun newLine() { + write(NORMALIZED_LINE_SEPARATOR) + } + } + props.store(bufferedWriter, "Vaadin Copilot Integration Runtime Properties") val dotFile = dotFileDirectory.findFile(DOTFILE) dotFile?.let { try { @@ -168,7 +169,7 @@ class CopilotPluginUtil { fun removeDotFile(project: Project) { runInEdt { WriteAction.run { - val dotFile = getDotFileDirectory(project)?.findFile(DOTFILE) + val dotFile = getDotFileDirectory(project, false)?.findFile(DOTFILE) dotFile?.let { try { it.delete(this) @@ -181,18 +182,18 @@ class CopilotPluginUtil { } } - private fun getDotFileDirectory(project: Project): VirtualFile? { + private fun getDotFileDirectory(project: Project, create: Boolean): VirtualFile? { val projectDir = project.guessProjectDir() if (projectDir == null) { LOG.error("Cannot guess project directory") return null } LOG.info("Project directory: $projectDir") - return projectDir.findOrCreateDirectory(IDEA_DIR) + return if (create) projectDir.findOrCreateDirectory(IDEA_DIR) else projectDir.findDirectory(IDEA_DIR) } fun getDotFile(project: Project): VirtualFile? { - return getDotFileDirectory(project)?.findFile(DOTFILE) + return getDotFileDirectory(project, false)?.findFile(DOTFILE) } fun isActive(project: Project): Boolean { From 4bd0f31c3bce6df77b3ca87b0bac9eedfa214385 Mon Sep 17 00:00:00 2001 From: marcin Date: Wed, 11 Dec 2024 11:19:13 +0000 Subject: [PATCH 3/3] Do not create Copilot dotfile for disposed projects (#210) Fixes: #206 --- .../plugin/copilot/listeners/CopilotVaadinProjectListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt b/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt index 379f8e3..abba867 100644 --- a/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt +++ b/src/main/kotlin/com/vaadin/plugin/copilot/listeners/CopilotVaadinProjectListener.kt @@ -14,7 +14,7 @@ class CopilotVaadinProjectListener : VaadinProjectListener { private var triggered = false override fun vaadinProjectDetected(project: Project) { - if (!triggered) { + if (!triggered && !project.isDisposed) { triggered = true saveDotFile(project) removeDotFileOnExit(project)