Bug 385642: Javadoc View should show method after code completion

Comment 11: Keep last input as long as the element exists
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
index 3a7f53e..640b045 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
@@ -158,7 +158,7 @@
 	/**
 	 * Set the input of this view.
 	 *
-	 * @param input the input object
+	 * @param input the input object, can be <code>null</code>
 	 */
 	abstract protected void doSetInput(Object input);
 
@@ -620,6 +620,13 @@
 
 				// The actual computation
 				final Object input= computeInput(part, selection, je, computeProgressMonitor);
+				if (input == null) {
+					IJavaElement oldElement= fCurrentViewInput;
+					if (oldElement == null || oldElement.exists()) {
+						// leave the last shown documentation until it becomes invalid
+						return;
+					}
+				}
 				final String description= input != null ? computeDescription(part, selection, je, computeProgressMonitor) : ""; //$NON-NLS-1$
 
 				Shell shell= getSite().getShell();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
index 7d4e6bf..08fbc8e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
@@ -873,14 +873,7 @@
 	 * @since 3.3
 	 */
 	private void refresh() {
-		IJavaElement input= getInput();
-		if (input == null) {
-			StringBuffer buffer= new StringBuffer(""); //$NON-NLS-1$
-			HTMLPrinter.insertPageProlog(buffer, 0, null, fBackgroundColorRGB, fgStyleSheet);
-			doSetInput(buffer.toString());
-		} else {
-			doSetInput(computeInput(input));
-		}
+		doSetInput(computeInput(getInput()));
 	}
 
 	/*
@@ -924,7 +917,7 @@
 	@Override
 	protected Object computeInput(Object input) {
 		if (getControl() == null || ! (input instanceof IJavaElement))
-			return getInputForNull();
+			return null;
 
 		IWorkbenchPart part= null;
 		IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
@@ -956,7 +949,7 @@
 	@Override
 	protected Object computeInput(IWorkbenchPart part, ISelection selection, IJavaElement input, IProgressMonitor monitor) {
 		if (getControl() == null || input == null)
-			return getInputForNull();
+			return null;
 
 		String javadocHtml;
 
@@ -975,9 +968,6 @@
 				javadocHtml= getJavadocHtml(new IJavaElement[] { input }, part, selection, monitor);
 		}
 
-		if (javadocHtml == null)
-			return ""; //$NON-NLS-1$
-
 		return javadocHtml;
 	}
 
@@ -1016,11 +1006,19 @@
 	/**
 	 * {@inheritDoc}
 	 * 
-	 * @param input a String containing the HTML to be showin in the view
+	 * @param input a String containing the HTML to be shown in the view, or <code>null</code>
 	 */
 	@Override
 	protected void doSetInput(Object input) {
-		String javadocHtml= (String)input;
+		String javadocHtml;
+		if (input instanceof String) {
+			javadocHtml= (String) input;
+		} else {
+			StringBuffer buffer= new StringBuffer();
+			HTMLPrinter.insertPageProlog(buffer, 0, null, fBackgroundColorRGB, fgStyleSheet);
+			HTMLPrinter.addPageEpilog(buffer);
+			javadocHtml= buffer.toString();
+		}
 		fOriginalInput= javadocHtml;
 
 		if (fInputSelectionProvider != null) {
@@ -1061,7 +1059,7 @@
 	 * @param activePart the active part if any
 	 * @param selection the selection of the active site if any
 	 * @param monitor a monitor to report progress to
-	 * @return a string with the Javadoc in HTML format.
+	 * @return a string with the Javadoc in HTML format, or <code>null</code> if none
 	 */
 	private String getJavadocHtml(IJavaElement[] result, IWorkbenchPart activePart, ISelection selection, IProgressMonitor monitor) {
 		StringBuffer buffer= new StringBuffer();
@@ -1153,6 +1151,9 @@
 				}
 			}
 		}
+		
+		if (buffer.length() == 0)
+			return null;
 
 		HTMLPrinter.insertPageProlog(buffer, 0, null, fBackgroundColorRGB, fgStyleSheet);
 		if (base != null) {
@@ -1163,13 +1164,6 @@
 		return buffer.toString();
 	}
 
-	private String getInputForNull() {
-		StringBuffer buffer= new StringBuffer();
-		HTMLPrinter.insertPageProlog(buffer, 0, null, fBackgroundColorRGB, fgStyleSheet);
-		HTMLPrinter.addPageEpilog(buffer);
-		return buffer.toString();
-	}
-
 	/**
 	 * Gets the label for the given member.
 	 *