Skip to content
This repository was archived by the owner on Apr 23, 2025. It is now read-only.

Commit fdddf7b

Browse files
authored
fix: dont NPE if initializing odo fails (#536) (#589)
* fixed NPE * preserve error that possibly happens * simplified usage/async download of odo Signed-off-by: Andre Dietisheim <[email protected]>
1 parent 734e108 commit fdddf7b

35 files changed

+569
-222
lines changed

src/it/java/org/jboss/tools/intellij/openshift/utils/odo/OdoCliTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import com.intellij.testFramework.fixtures.BasePlatformTestCase;
1515
import com.redhat.devtools.intellij.common.utils.MessagesHelper;
1616
import org.apache.commons.io.FileUtils;
17-
import org.junit.After;
18-
import org.junit.Before;
1917

2018
import java.io.File;
2119
import java.io.IOException;
@@ -26,7 +24,6 @@
2624

2725
import static org.awaitility.Awaitility.await;
2826
import static org.awaitility.Awaitility.with;
29-
import static org.junit.Assert.assertNotNull;
3027

3128

3229
public abstract class OdoCliTest extends BasePlatformTestCase {

src/main/java/org/jboss/tools/intellij/openshift/actions/OdoAction.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
import org.jboss.tools.intellij.openshift.telemetry.TelemetrySender;
1717
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
1818
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
19+
import org.jetbrains.annotations.NotNull;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
1922

2023
import javax.swing.tree.TreePath;
2124

2225
import static org.jboss.tools.intellij.openshift.telemetry.TelemetryService.PREFIX_ACTION;
2326

2427
public abstract class OdoAction extends StructureTreeAction implements TelemetryHandler {
2528

29+
private static final Logger LOGGER = LoggerFactory.getLogger(OdoAction.class);
30+
2631
protected TelemetrySender telemetrySender;
2732

2833
protected OdoAction(Class... filters) {
@@ -32,14 +37,23 @@ protected OdoAction(Class... filters) {
3237
@Override
3338
public void actionPerformed(AnActionEvent anActionEvent, TreePath path, Object selected) {
3439
telemetrySender = new TelemetrySender(PREFIX_ACTION + getTelemetryActionName());
35-
this.actionPerformed(anActionEvent, (Object) getElement(selected), getOdo(anActionEvent));
40+
Odo odo = getOdo(anActionEvent);
41+
if (odo == null) {
42+
return;
43+
}
44+
this.actionPerformed(anActionEvent, (Object) getElement(selected), odo);
3645
}
3746

3847
private Odo getOdo(AnActionEvent anActionEvent) {
39-
return ActionUtils.getApplicationRootNode(anActionEvent).getOdo();
48+
try {
49+
return ActionUtils.getApplicationRootNode(anActionEvent).getOdo().getNow(null);
50+
} catch(Exception e) {
51+
LOGGER.warn("Could not get odo: " + e.getMessage(), e);
52+
return null;
53+
}
4054
}
4155

42-
public abstract void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo);
56+
public abstract void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo);
4357

4458
protected abstract String getTelemetryActionName();
4559

src/main/java/org/jboss/tools/intellij/openshift/actions/OpenGettingStartedAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.intellij.openapi.wm.ToolWindowManager;
1717
import org.jboss.tools.intellij.openshift.tree.application.ApplicationsRootNode;
1818
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
19+
import org.jetbrains.annotations.NotNull;
1920

2021
public class OpenGettingStartedAction extends OdoAction {
2122
private static final String GETTING_STARTED_WINDOW_ID = "OpenShiftGettingStarted";
@@ -30,7 +31,7 @@ protected String getTelemetryActionName() {
3031
}
3132

3233
@Override
33-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
34+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
3435
Project project = anActionEvent.getProject();
3536
if (project == null) {
3637
return;

src/main/java/org/jboss/tools/intellij/openshift/actions/binding/DeleteBindingAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.jboss.tools.intellij.openshift.telemetry.TelemetryService;
1818
import org.jboss.tools.intellij.openshift.tree.application.BindingNode;
1919
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
20+
import org.jetbrains.annotations.NotNull;
2021

2122
import java.io.IOException;
2223

@@ -26,7 +27,7 @@ public DeleteBindingAction() {
2627
}
2728

2829
@Override
29-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
30+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
3031
try {
3132
BindingNode node = (BindingNode) selected;
3233
if (Messages.NO == Messages.showYesNoDialog("Delete binding '" + node.getName() + "'.\nAre you sure?",

src/main/java/org/jboss/tools/intellij/openshift/actions/binding/ShowBindingDetailsAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
import org.jboss.tools.intellij.openshift.tree.application.BindingNode;
1717
import org.jboss.tools.intellij.openshift.ui.binding.BindingDetailDialog;
1818
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
19+
import org.jetbrains.annotations.NotNull;
1920

2021
public class ShowBindingDetailsAction extends OdoAction {
2122
public ShowBindingDetailsAction() {
2223
super(BindingNode.class);
2324
}
2425

2526
@Override
26-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
27+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
2728
BindingNode node = (BindingNode) selected;
2829
BindingDetailDialog dialog = new BindingDetailDialog(anActionEvent.getProject(), null, node.getBinding());
2930
dialog.show();

src/main/java/org/jboss/tools/intellij/openshift/actions/cluster/AboutAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.jboss.tools.intellij.openshift.actions.OdoAction;
1818
import org.jboss.tools.intellij.openshift.tree.application.ApplicationsRootNode;
1919
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
20+
import org.jetbrains.annotations.NotNull;
2021

2122
import java.io.IOException;
2223

@@ -32,7 +33,7 @@ public AboutAction() {
3233
protected String getTelemetryActionName() { return "about"; }
3334

3435
@Override
35-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
36+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
3637
runWithProgress((ProgressIndicator progress) -> {
3738
try {
3839
odo.about();

src/main/java/org/jboss/tools/intellij/openshift/actions/cluster/LoginAction.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.jboss.tools.intellij.openshift.tree.application.ApplicationsRootNode;
1919
import org.jboss.tools.intellij.openshift.ui.cluster.LoginDialog;
2020
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
21+
import org.jetbrains.annotations.NotNull;
2122

2223
import java.io.IOException;
2324

@@ -36,12 +37,12 @@ public LoginAction() {
3637
protected String getTelemetryActionName() { return "login to cluster"; }
3738

3839
@Override
39-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
40+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
4041
ApplicationsRootNode clusterNode = (ApplicationsRootNode) selected;
4142
runWithProgress((ProgressIndicator progress) -> {
4243
try {
4344
LoginDialog loginDialog = UIHelper.executeInUI(() -> {
44-
LoginDialog dialog = new LoginDialog(anActionEvent.getProject(), null, clusterNode.getOdo().getMasterUrl().toString());
45+
LoginDialog dialog = new LoginDialog(anActionEvent.getProject(), null, odo.getMasterUrl().toString());
4546
dialog.show();
4647
return dialog;
4748
});
@@ -64,6 +65,7 @@ public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo od
6465
}
6566
},
6667
"Logging in...",
67-
getEventProject(anActionEvent));
68+
getEventProject(anActionEvent)
69+
);
6870
}
6971
}

src/main/java/org/jboss/tools/intellij/openshift/actions/cluster/OpenConsoleAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.intellij.openapi.actionSystem.AnActionEvent;
1515
import com.intellij.openapi.ui.Messages;
1616
import org.jboss.tools.intellij.openshift.utils.odo.Odo;
17+
import org.jetbrains.annotations.NotNull;
1718

1819
import java.io.IOException;
1920

@@ -25,7 +26,7 @@ public class OpenConsoleAction extends LoggedInClusterAction {
2526
protected String getTelemetryActionName() { return "open console"; }
2627

2728
@Override
28-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
29+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
2930
try {
3031
String url = odo.consoleURL();
3132
BrowserUtil.open(url);

src/main/java/org/jboss/tools/intellij/openshift/actions/component/CreateComponentAction.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,19 @@ public static void execute(ParentableNode<?> parentNode) {
5353
CreateComponentAction action = (CreateComponentAction) ActionManager.getInstance().getAction(CreateComponentAction.class.getName());
5454
NamespaceNode namespaceNode = (NamespaceNode) parentNode;
5555
action.telemetrySender = new TelemetrySender(PREFIX_ACTION + action.getTelemetryActionName());
56-
action.doActionPerformed(namespaceNode, namespaceNode.getRoot().getOdo(), namespaceNode.getName(),
57-
namespaceNode.getRoot(), namespaceNode.getRoot().getProject());
56+
Odo odo = namespaceNode.getRoot().getOdo().getNow(null);
57+
if (odo == null) {
58+
return;
59+
}
60+
action.doActionPerformed(namespaceNode, odo, namespaceNode.getName(),
61+
namespaceNode.getRoot(), namespaceNode.getRoot().getProject());
5862
}
5963

6064
@Override
6165
protected String getTelemetryActionName() { return "create component"; }
6266

6367
@Override
64-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
68+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
6569
NamespaceNode namespaceNode = ((NamespaceNode) selected);
6670
ApplicationsRootNode rootNode = ((ParentableNode<Object>) selected).getRoot();
6771
Project project = rootNode.getProject();

src/main/java/org/jboss/tools/intellij/openshift/actions/component/DebugComponentAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ protected String getTelemetryActionName() {
7474
}
7575

7676
@Override
77-
public void actionPerformed(AnActionEvent anActionEvent, Object selected, Odo odo) {
77+
public void actionPerformed(AnActionEvent anActionEvent, Object selected, @NotNull Odo odo) {
7878
Project project = anActionEvent.getData(CommonDataKeys.PROJECT);
7979
if (project == null) {
8080
sendTelemetryResults(TelemetryResult.ABORTED);

0 commit comments

Comments
 (0)