Skip to content

Commit bc5a9ac

Browse files
committed
SWTError: No more handles
Fixes #116
1 parent b2a7a9c commit bc5a9ac

File tree

5 files changed

+51
-35
lines changed

5 files changed

+51
-35
lines changed

ReleaseNotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Eclipse Update Site:
1515

1616
* [#114](https://github.com/pmd/pmd-eclipse-plugin/issues/114): NPE in PriorityDescriptorCache
1717
* [#115](https://github.com/pmd/pmd-eclipse-plugin/issues/115): Missing dependencies when installing
18+
* [#116](https://github.com/pmd/pmd-eclipse-plugin/issues/116): SWTError: No more handles
1819

1920
### API Changes
2021

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/ui/model/RootRecord.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ protected final AbstractPMDRecord[] createChildren() {
7373

7474
// ... and create Records for them
7575
for (IProject project : projects) {
76-
projectList.add(new ProjectRecord(project, this));
76+
if (project.isOpen()) {
77+
projectList.add(new ProjectRecord(project, this));
78+
}
7779
}
7880

7981
// return the Array of children

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/ui/views/ViolationOverview.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ public void dispose() {
175175

176176
memento.save();
177177

178+
menuManager.dispose();
179+
178180
super.dispose();
179181
}
180182

@@ -414,7 +416,7 @@ public void refresh() {
414416

415417
public void refreshMenu() {
416418
menuManager.createDropDownMenu(getViewSite().getActionBars().getMenuManager());
417-
menuManager.createContextMenu();
419+
// note: the context menu doesn't need to be refreshed
418420
}
419421

420422
/**

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/ui/views/ViolationOverviewContentProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,7 @@ public void resourceChanged(IResourceChangeEvent event) {
303303
final ChangeRecord<AbstractPMDRecord> changes = changeEvaluator.changeRecordFor(event);
304304

305305
// the additions, removals and changes are given to the viewer so that it can update itself
306-
// updating the table MUST be in sync
307-
treeViewer.getControl().getDisplay().syncExec(new Runnable() {
306+
treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
308307
public void run() {
309308
updateViewer(changes);
310309
}

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/ui/views/ViolationOverviewMenuManager.java

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.eclipse.jface.action.Separator;
1616
import org.eclipse.swt.widgets.Tree;
1717
import org.eclipse.ui.IWorkbenchActionConstants;
18+
import org.eclipse.ui.services.IDisposable;
1819

1920
import net.sourceforge.pmd.RulePriority;
2021
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
@@ -35,9 +36,10 @@
3536
*
3637
*/
3738

38-
public class ViolationOverviewMenuManager {
39+
public class ViolationOverviewMenuManager implements IDisposable {
3940
private final ViolationOverview overview;
4041
private PriorityFilterAction[] priorityActions;
42+
private MenuManager contextMenuManager;
4143

4244
public ViolationOverviewMenuManager(ViolationOverview overview) {
4345
this.overview = overview;
@@ -92,40 +94,42 @@ public void createDropDownMenu(IMenuManager manager) {
9294
* Creates the Context Menu
9395
*/
9496
public void createContextMenu() {
95-
MenuManager manager = new MenuManager();
96-
manager.setRemoveAllWhenShown(true);
97-
manager.addMenuListener(new IMenuListener() {
98-
public void menuAboutToShow(IMenuManager manager) {
99-
MenuManager submenuManager;
100-
101-
// one SubMenu for filtering Projects
102-
submenuManager = new MenuManager(getString(StringKeys.VIEW_MENU_RESOURCE_FILTER));
103-
createProjectFilterMenu(submenuManager);
104-
manager.add(submenuManager);
105-
106-
// ... another one for filtering Priorities
107-
submenuManager = new MenuManager(getString(StringKeys.VIEW_MENU_PRIORITY_FILTER));
108-
for (PriorityFilterAction priorityAction : priorityActions) {
109-
submenuManager.add(priorityAction);
110-
}
111-
manager.add(submenuManager);
112-
113-
// ... another one for showing the presentation types
114-
submenuManager = new MenuManager(getString(StringKeys.VIEW_MENU_PRESENTATION_TYPE));
115-
createShowTypeSubmenu(submenuManager);
116-
manager.add(submenuManager);
117-
118-
// additions Action: Clear PMD Violations
119-
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
120-
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS + "-end"));
97+
if (contextMenuManager == null) {
98+
contextMenuManager = new MenuManager();
99+
contextMenuManager.setRemoveAllWhenShown(true);
100+
contextMenuManager.addMenuListener(new IMenuListener() {
101+
public void menuAboutToShow(IMenuManager manager) {
102+
MenuManager submenuManager;
103+
104+
// one SubMenu for filtering Projects
105+
submenuManager = new MenuManager(getString(StringKeys.VIEW_MENU_RESOURCE_FILTER));
106+
createProjectFilterMenu(submenuManager);
107+
manager.add(submenuManager);
108+
109+
// ... another one for filtering Priorities
110+
submenuManager = new MenuManager(getString(StringKeys.VIEW_MENU_PRIORITY_FILTER));
111+
for (PriorityFilterAction priorityAction : priorityActions) {
112+
submenuManager.add(priorityAction);
113+
}
114+
manager.add(submenuManager);
115+
116+
// ... another one for showing the presentation types
117+
submenuManager = new MenuManager(getString(StringKeys.VIEW_MENU_PRESENTATION_TYPE));
118+
createShowTypeSubmenu(submenuManager);
119+
manager.add(submenuManager);
120+
121+
// additions Action: Clear PMD Violations
122+
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
123+
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS + "-end"));
121124

122-
}
123-
});
125+
}
126+
});
127+
}
124128

125129
Tree tree = overview.getViewer().getTree();
126-
tree.setMenu(manager.createContextMenu(tree));
130+
tree.setMenu(contextMenuManager.createContextMenu(tree));
127131

128-
overview.getSite().registerContextMenu(manager, overview.getViewer());
132+
overview.getSite().registerContextMenu(contextMenuManager, overview.getViewer());
129133
}
130134

131135
/**
@@ -178,4 +182,12 @@ private void createShowTypeSubmenu(IMenuManager manager) {
178182
private String getString(String key) {
179183
return PMDPlugin.getDefault().getStringTable().getString(key);
180184
}
185+
186+
@Override
187+
public void dispose() {
188+
if (contextMenuManager != null) {
189+
contextMenuManager.dispose();
190+
contextMenuManager = null;
191+
}
192+
}
181193
}

0 commit comments

Comments
 (0)