Skip to content

Commit 4739879

Browse files
Flanker-MSFTFlanker-MSFT
authored andcommitted
Fix possible NPE in azure facet tree structure provider
1 parent 85bf4f8 commit 4739879

File tree

1 file changed

+6
-12
lines changed
  • PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-resource-connector-lib/src/main/java/com/microsoft/azure/toolkit/intellij/connector/projectexplorer

1 file changed

+6
-12
lines changed

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-resource-connector-lib/src/main/java/com/microsoft/azure/toolkit/intellij/connector/projectexplorer/AzureFacetTreeStructureProvider.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ public final class AzureFacetTreeStructureProvider implements TreeStructureProvi
5151
public AzureFacetTreeStructureProvider(Project project) {
5252
myProject = project;
5353
final AbstractProjectViewPane currentProjectViewPane = ProjectView.getInstance(project).getCurrentProjectViewPane();
54-
final JTree tree = currentProjectViewPane.getTree();
55-
ClientProperty.put(tree, ANIMATION_IN_RENDERER_ALLOWED, true);
54+
Optional.ofNullable(currentProjectViewPane)
55+
.map(AbstractProjectViewPane::getTree)
56+
.ifPresent(tree -> ClientProperty.put(tree, ANIMATION_IN_RENDERER_ALLOWED, true));
5657
}
5758

5859
@Override
@@ -69,7 +70,6 @@ public Collection<AbstractTreeNode<?>> modify(@Nonnull AbstractTreeNode<?> paren
6970
final boolean defaultShow = state == null && Objects.nonNull(azureModule) && (azureModule.hasAzureFacet() || azureModule.isInitialized() || azureModule.hasAzureDependencies());
7071
if (!forceHide && (forceShow || defaultShow)) {
7172
addListener(parent.getProject());
72-
final AbstractProjectViewPane viewPane = ProjectView.getInstance(parent.getProject()).getCurrentProjectViewPane();
7373
final AbstractTreeNode<?> dotAzureDir = children.stream()
7474
.filter(n -> n instanceof PsiDirectoryNode)
7575
.map(n -> ((PsiDirectoryNode) n))
@@ -110,18 +110,15 @@ private Module toModule(final AbstractTreeNode<?> node) {
110110

111111
@RequiredArgsConstructor
112112
static class AzureProjectExplorerMouseListener extends MouseAdapter {
113-
private static final Separator SEPARATOR = new Separator();
114113
private final JTree tree;
115-
private final Project project;
116114

117115
private IAzureFacetNode currentNode;
118116
private List<AnAction> backupActions;
119117

120118
@Override
121119
public void mousePressed(MouseEvent e) {
122120
final AbstractTreeNode<?> currentTreeNode = getCurrentTreeNode(e);
123-
if (SwingUtilities.isLeftMouseButton(e) && currentTreeNode instanceof IAzureFacetNode) {
124-
final IAzureFacetNode node = (IAzureFacetNode) currentTreeNode;
121+
if (SwingUtilities.isLeftMouseButton(e) && currentTreeNode instanceof IAzureFacetNode node) {
125122
final DataContext context = DataManager.getInstance().getDataContext(tree);
126123
final AnActionEvent event = AnActionEvent.createFromAnAction(new EmptyAction(), e, ActionPlaces.PROJECT_VIEW_POPUP + ".click", context);
127124
if (e.getClickCount() == 1) {
@@ -146,14 +143,13 @@ public void mouseExited(MouseEvent e) {
146143

147144
private void modifyPopupActions(MouseEvent e) {
148145
final AbstractTreeNode<?> node = getCurrentTreeNode(e);
149-
if (!(node instanceof IAzureFacetNode)) {
146+
if (!(node instanceof IAzureFacetNode newNode)) {
150147
if (Objects.nonNull(currentNode)) {
151148
// clean up popup menu actions
152149
resetPopupMenuActions();
153150
}
154151
return;
155152
}
156-
final IAzureFacetNode newNode = (IAzureFacetNode) node;
157153
if (!Objects.equals(newNode, currentNode)) {
158154
// update popup menu actions for new node
159155
updatePopupMenuActions(newNode);
@@ -163,8 +159,6 @@ private void modifyPopupActions(MouseEvent e) {
163159

164160
private AbstractTreeNode<?> getCurrentTreeNode(MouseEvent e) {
165161
final TreePath path = tree.getClosestPathForLocation(e.getX(), e.getY());
166-
// final int rowForLocation = tree.getRowForLocation(e.getX(), e.getY());
167-
// final TreePath pathForRow = tree.getPathForRow(rowForLocation);
168162
return TreeUtil.getAbstractTreeNode(path);
169163
}
170164

@@ -201,7 +195,7 @@ private void addListener(@Nonnull final Project project) {
201195
if (!exists) {
202196
final MouseListener[] mouseListeners = tree.getMouseListeners();
203197
Arrays.stream(mouseListeners).forEach(tree::removeMouseListener);
204-
tree.addMouseListener(new AzureProjectExplorerMouseListener(tree, project));
198+
tree.addMouseListener(new AzureProjectExplorerMouseListener(tree));
205199
Arrays.stream(mouseListeners).forEach(tree::addMouseListener);
206200
}
207201
}

0 commit comments

Comments
 (0)