From 579a0fdfa8d925280bfa7ec15110479bb15bfbb4 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 20 Apr 2011 08:03:45 +0000 Subject: [PATCH] Bug 342840: Clipboard is not disposed. --- .../internal/ui/actions/CopyTreeAction.java | 28 ++++++++----------- .../internal/ui/callhierarchy/CHViewPart.java | 12 ++------ .../internal/ui/typehierarchy/THViewPart.java | 12 ++------ 3 files changed, 18 insertions(+), 34 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/CopyTreeAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/CopyTreeAction.java index 3bb71402e26..641004585f6 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/CopyTreeAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/CopyTreeAction.java @@ -17,8 +17,12 @@ import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.osgi.util.TextProcessor; - import org.eclipse.swt.SWTError; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.DND; @@ -27,14 +31,6 @@ import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.part.ViewPart; -import org.eclipse.core.runtime.Assert; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.TreeViewer; - import org.eclipse.cdt.internal.ui.util.SelectionUtil; /** @@ -45,13 +41,10 @@ public class CopyTreeAction extends Action { private ViewPart fView; private TreeViewer fViewer; - private final Clipboard fClipboard; - public CopyTreeAction(String label, ViewPart view, Clipboard clipboard, TreeViewer viewer) { + public CopyTreeAction(String label, ViewPart view, TreeViewer viewer) { super(label); - Assert.isNotNull(clipboard); fView= view; - fClipboard= clipboard; fViewer= viewer; } @@ -79,8 +72,9 @@ public class CopyTreeAction extends Action { addChildren(fViewer.getTree().getSelection()[0], 0, buf); TextTransfer plainTextTransfer= TextTransfer.getInstance(); + Clipboard clipboard= new Clipboard(fView.getSite().getShell().getDisplay()); try { - fClipboard.setContents( + clipboard.setContents( new String[] { convertLineTerminators(buf.toString()) }, new Transfer[] { plainTextTransfer }); } catch (SWTError e) { @@ -90,6 +84,8 @@ public class CopyTreeAction extends Action { ActionMessages.CopyTreeAction_problem, ActionMessages.CopyTreeAction_clipboard_busy)) { run(); } + } finally { + clipboard.dispose(); } } @@ -110,8 +106,8 @@ public class CopyTreeAction extends Action { if (item.getExpanded()) { TreeItem[] items= item.getItems(); - for (int i= 0; i < items.length; i++) { - addChildren(items[i], indent + 1, buf); + for (TreeItem item2 : items) { + addChildren(item2, indent + 1, buf); } } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHViewPart.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHViewPart.java index 3042732a4ea..ccda5704583 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHViewPart.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHViewPart.java @@ -34,7 +34,6 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.Transfer; @@ -105,8 +104,6 @@ public class CHViewPart extends ViewPart { private ArrayList fHistoryEntries= new ArrayList(MAX_HISTORY_SIZE); - private Clipboard fClipboard; - // widgets private PageBook fPagebook; private Composite fViewerPage; @@ -208,8 +205,6 @@ public class CHViewPart extends ViewPart { getSite().setSelectionProvider(new AdaptingSelectionProvider(ICElement.class, fTreeViewer)); - fClipboard = new Clipboard(parent.getDisplay()); - initDragAndDrop(); createActions(); createContextMenu(); @@ -489,7 +484,7 @@ public class CHViewPart extends ViewPart { fHistoryAction = new CHHistoryDropDownAction(this); - fCopyAction= new CopyCallHierarchyAction(this, fClipboard, fTreeViewer); + fCopyAction= new CopyCallHierarchyAction(this, fTreeViewer); // setup action bar // global action hooks @@ -811,9 +806,8 @@ public class CHViewPart extends ViewPart { } private static class CopyCallHierarchyAction extends CopyTreeAction { - public CopyCallHierarchyAction(ViewPart view, Clipboard clipboard, TreeViewer viewer) { - super(CHMessages.CHViewPart_CopyCallHierarchy_label, view, clipboard, viewer); -// PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ICHelpContextIds.CALL_HIERARCHY_COPY_ACTION); + public CopyCallHierarchyAction(ViewPart view, TreeViewer viewer) { + super(CHMessages.CHViewPart_CopyCallHierarchy_label, view, viewer); } } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java index d13cee18982..7fcc1fae784 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java @@ -45,7 +45,6 @@ import org.eclipse.swt.accessibility.AccessibleEvent; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.ViewForm; -import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.Transfer; @@ -142,8 +141,6 @@ public class THViewPart extends ViewPart implements ITHModelPresenter { private ArrayList fHistoryEntries= new ArrayList(MAX_HISTORY_SIZE); private int fIgnoreSelectionChanges= 0; - private Clipboard fClipboard; - // widgets private PageBook fPagebook; private Label fInfoText; @@ -235,8 +232,6 @@ public class THViewPart extends ViewPart implements ITHModelPresenter { initSelectionProvider(); - fClipboard = new Clipboard(parent.getDisplay()); - initDragAndDrop(); createActions(); createContextMenu(); @@ -785,7 +780,7 @@ public class THViewPart extends ViewPart implements ITHModelPresenter { fHistoryAction = new THHistoryDropDownAction(this); - fCopyAction= new CopyTypeHierarchyAction(this, fClipboard, fHierarchyTreeViewer); + fCopyAction= new CopyTypeHierarchyAction(this, fHierarchyTreeViewer); // setup action bar // global action hooks @@ -1132,9 +1127,8 @@ public class THViewPart extends ViewPart implements ITHModelPresenter { } private static class CopyTypeHierarchyAction extends CopyTreeAction { - public CopyTypeHierarchyAction(ViewPart view, Clipboard clipboard, TreeViewer viewer) { - super(Messages.THViewPart_CopyTypeHierarchy, view, clipboard, viewer); -// PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ICHelpContextIds.TYPE_HIERARCHY_COPY_ACTION); + public CopyTypeHierarchyAction(ViewPart view, TreeViewer viewer) { + super(Messages.THViewPart_CopyTypeHierarchy, view, viewer); } } }