Bug 550222 - TeamAction getTargetPage() can return null - similar to what getTargetPart() is doing, return active page - if the "target" part is disposed, set it to null to avoid memory leaks Change-Id: I41e2fc0491b6c9eb524ecb02cd69f7a613ff819b Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java index b7e6d15..6653f89 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java
@@ -100,7 +100,11 @@ @Override public void partClosed(IWorkbenchPartReference partRef) { - if (targetPart == partRef.getPart(false)) { + if(targetPart == null) { + return; + } + IWorkbenchPart part = partRef.getPart(false); + if (targetPart == part) { targetPart = null; } } @@ -425,8 +429,17 @@ * @return IWorkbenchPage */ protected IWorkbenchPage getTargetPage() { - if (getTargetPart() == null) return TeamUIPlugin.getActivePage(); - return getTargetPart().getSite().getPage(); + IWorkbenchPart target = getTargetPart(); + if (target == null) { + return TeamUIPlugin.getActivePage(); + } + IWorkbenchPage page = target.getSite().getPage(); + if(page == null) { + // part was disposed => null targetPart to avoid memory leak + targetPart = null; + return TeamUIPlugin.getActivePage(); + } + return page; } /** @@ -466,7 +479,6 @@ @Override public void dispose() { - super.dispose(); if(window != null) { window.getSelectionService().removePostSelectionListener(selectionListener); if (window.getActivePage() != null) { @@ -479,6 +491,7 @@ window = null; targetPart = null; shell = null; + super.dispose(); } /**