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.
*