From 7b76308c349523fff21ef2968cad00a5e4dc363f Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Wed, 22 Feb 2023 22:38:32 +0000 Subject: [PATCH] 1.0.8 - Fix ToolWindow NPE, Closes #3 --- build.gradle.kts | 2 +- .../chatgpt/ide/action/AskAction.java | 17 +++++++---------- .../chatgpt/ide/action/BaseAction.java | 4 ++-- .../ide/toolwindow/ChatGptToolWindow.java | 8 ++------ .../toolwindow/ChatGptToolWindowFactory.java | 2 +- .../ide/toolwindow/ToolWindowService.java | 11 ++++------- src/main/resources/META-INF/plugin.xml | 3 ++- 7 files changed, 19 insertions(+), 28 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4ee28a55..9f7049ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "ee.carlrobert" -version = "1.0.7" +version = "1.0.8" repositories { mavenCentral() diff --git a/src/main/java/ee/carlrobert/chatgpt/ide/action/AskAction.java b/src/main/java/ee/carlrobert/chatgpt/ide/action/AskAction.java index b0ba1335..6eb8770d 100644 --- a/src/main/java/ee/carlrobert/chatgpt/ide/action/AskAction.java +++ b/src/main/java/ee/carlrobert/chatgpt/ide/action/AskAction.java @@ -3,7 +3,6 @@ package ee.carlrobert.chatgpt.ide.action; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.wm.ToolWindowManager; import ee.carlrobert.chatgpt.client.ApiClient; import ee.carlrobert.chatgpt.ide.toolwindow.ToolWindowService; import org.jetbrains.annotations.NotNull; @@ -19,15 +18,13 @@ public class AskAction extends AnAction { public void actionPerformed(@NotNull AnActionEvent event) { var project = event.getProject(); if (project != null) { - var toolWindow = ToolWindowManager.getInstance(project).getToolWindow("ChatGPT"); - if (toolWindow != null) { - toolWindow.show(); - toolWindow.setTitle(""); - var toolWindowService = ApplicationManager.getApplication().getService(ToolWindowService.class); - ApiClient.getInstance().clearQueries(); - toolWindowService.removeAll(); - toolWindowService.paintLandingView(); - } + ApiClient.getInstance().clearQueries(); + var toolWindowService = ApplicationManager.getApplication().getService(ToolWindowService.class); + var toolWindow = toolWindowService.getToolWindow(project); + toolWindow.show(); + toolWindow.setTitle(""); + toolWindowService.removeAll(); + toolWindowService.paintLandingView(); } } } diff --git a/src/main/java/ee/carlrobert/chatgpt/ide/action/BaseAction.java b/src/main/java/ee/carlrobert/chatgpt/ide/action/BaseAction.java index 67f4482b..12163f33 100644 --- a/src/main/java/ee/carlrobert/chatgpt/ide/action/BaseAction.java +++ b/src/main/java/ee/carlrobert/chatgpt/ide/action/BaseAction.java @@ -19,10 +19,10 @@ public abstract class BaseAction extends AnAction { var project = event.getProject(); var editor = event.getData(PlatformDataKeys.EDITOR); if (editor != null && project != null) { + ApiClient.getInstance().clearQueries(); var toolWindowService = ApplicationManager.getApplication().getService(ToolWindowService.class); var selectedText = editor.getSelectionModel().getSelectedText(); - ApiClient.getInstance().clearQueries(); - initToolWindow(toolWindowService.getToolWindow()); + initToolWindow(toolWindowService.getToolWindow(project)); toolWindowService.removeAll(); toolWindowService.paintUserMessage(selectedText); toolWindowService.sendMessage(getPrompt(selectedText), project, null); diff --git a/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindow.java b/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindow.java index 94a8257f..ce0bdf8c 100644 --- a/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindow.java +++ b/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindow.java @@ -3,7 +3,6 @@ package ee.carlrobert.chatgpt.ide.toolwindow; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ui.componentsList.components.ScrollablePanel; -import com.intellij.openapi.wm.ToolWindow; import com.intellij.ui.components.JBScrollPane; import ee.carlrobert.chatgpt.ide.toolwindow.components.TextArea; import java.awt.Adjustable; @@ -24,15 +23,13 @@ import org.jetbrains.annotations.NotNull; public class ChatGptToolWindow { private final Project project; - private final ToolWindow toolWindow; private JPanel chatGptToolWindowContent; private JScrollPane scrollPane; private JTextArea textArea; private JScrollPane textAreaScrollPane; - public ChatGptToolWindow(@NotNull Project project, @NotNull ToolWindow toolWindow) { + public ChatGptToolWindow(@NotNull Project project) { this.project = project; - this.toolWindow = toolWindow; } public void handleSubmit() { @@ -72,7 +69,7 @@ public class ChatGptToolWindow { @Override public JScrollBar createVerticalScrollBar() { JScrollBar verticalScrollBar = new JScrollPane.ScrollBar(1); - verticalScrollBar.setPreferredSize(new Dimension(0,0)); + verticalScrollBar.setPreferredSize(new Dimension(0, 0)); return verticalScrollBar; } }; @@ -96,7 +93,6 @@ public class ChatGptToolWindow { scrollPane.setViewportBorder(null); var toolWindowService = ApplicationManager.getApplication().getService(ToolWindowService.class); - toolWindowService.setToolWindow(toolWindow); toolWindowService.setScrollablePanel(scrollablePanel); toolWindowService.paintLandingView(); } diff --git a/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindowFactory.java b/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindowFactory.java index e5fab006..6263d38b 100644 --- a/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindowFactory.java +++ b/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ChatGptToolWindowFactory.java @@ -13,7 +13,7 @@ public class ChatGptToolWindowFactory implements ToolWindowFactory, DumbAware { public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { var content = ApplicationManager.getApplication() .getService(ContentFactory.class) - .createContent(new ChatGptToolWindow(project, toolWindow).getContent(), "", false); + .createContent(new ChatGptToolWindow(project).getContent(), "", false); toolWindow.getContentManager().addContent(content); } } diff --git a/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ToolWindowService.java b/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ToolWindowService.java index f5a1d05c..1f5bc8e6 100644 --- a/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ToolWindowService.java +++ b/src/main/java/ee/carlrobert/chatgpt/ide/toolwindow/ToolWindowService.java @@ -8,6 +8,7 @@ import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ui.componentsList.components.ScrollablePanel; import com.intellij.openapi.wm.ToolWindow; +import com.intellij.openapi.wm.ToolWindowManager; import ee.carlrobert.chatgpt.EmptyCallback; import ee.carlrobert.chatgpt.client.ApiClient; import ee.carlrobert.chatgpt.ide.settings.SettingsConfigurable; @@ -24,23 +25,19 @@ import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; +import org.jetbrains.annotations.NotNull; public class ToolWindowService { private ScrollablePanel scrollablePanel; - private ToolWindow toolWindow; private boolean isLandingViewVisible; public void setScrollablePanel(ScrollablePanel scrollablePanel) { this.scrollablePanel = scrollablePanel; } - public void setToolWindow(ToolWindow toolWindow) { - this.toolWindow = toolWindow; - } - - public ToolWindow getToolWindow() { - return toolWindow; + public ToolWindow getToolWindow(@NotNull Project project) { + return ToolWindowManager.getInstance(project).getToolWindow("ChatGPT"); } public void paintUserMessage(String userMessage) { diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 153e093e..8fbe4778 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -31,6 +31,7 @@ +
  • 1.0.8 Migrate to Java 17, fix ToolWindow NPE
  • 1.0.7 Code refactoring, add readme
  • 1.0.6 Display proper message for insufficient quota
  • 1.0.5 Replace TextField with TextArea, remove Tahoma font, increase response max token size
  • @@ -54,7 +55,7 @@ -