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();
 	}
 
 	/**