* IBM Corporation - initial API and implementation
*******************************************************************************/
package net.sourceforge.phpdt.internal.ui.text.java.hover;
-
-
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import net.sourceforge.phpdt.ui.text.java.hover.IJavaEditorTextHover;
import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.information.IInformationProviderExtension2;
import org.eclipse.ui.IEditorPart;
+
/**
* Caution: this implementation is a layer breaker and contains some "shortcuts"
*/
-public class BestMatchHover extends AbstractJavaEditorTextHover {
-
- private static class JavaEditorTextHoverDescriptorComparator implements Comparator {
-
- /*
- * @see Comparator#compare(Object, Object)
- */
- public int compare(Object object0, Object object1) {
-
- JavaEditorTextHoverDescriptor element0= (JavaEditorTextHoverDescriptor)object0;
- JavaEditorTextHoverDescriptor element1= (JavaEditorTextHoverDescriptor)object1;
-
- String id0= element0.getId();
- String id1= element1.getId();
-
- if (id0 != null && id0.equals(id1))
- return 0;
-
- if (id0 != null && JavaProblemHover.isJavaProblemHover(id0))
- return -1;
-
- if (id1 != null && JavaProblemHover.isJavaProblemHover(id1))
- return +1;
-
-
- // now compare non-problem hovers
- if (element0.dependsOn(element1))
- return -1;
-
- if (element1.dependsOn(element0))
- return +1;
-
- return 0;
- }
- }
-
- protected String fCurrentPerspectiveId;
- protected List fTextHoverSpecifications;
- protected List fInstantiatedTextHovers;
+public class BestMatchHover extends AbstractJavaEditorTextHover implements ITextHoverExtension, IInformationProviderExtension2 {
+ private List fTextHoverSpecifications;
+ private List fInstantiatedTextHovers;
+ private ITextHover fBestHover;
public BestMatchHover() {
installTextHovers();
if (!PreferenceConstants.ID_BESTMATCH_HOVER.equals(hoverDescs[i].getId()))
fTextHoverSpecifications.add(hoverDescs[i]);
}
- Collections.sort(fTextHoverSpecifications, new JavaEditorTextHoverDescriptorComparator());
}
private void checkTextHovers() {
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
checkTextHovers();
+ fBestHover= null;
if (fInstantiatedTextHovers == null)
return null;
for (Iterator iterator= fInstantiatedTextHovers.iterator(); iterator.hasNext(); ) {
- ITextHover hover= (ITextHover) iterator.next();
+ ITextHover hover= (ITextHover)iterator.next();
String s= hover.getHoverInfo(textViewer, hoverRegion);
- if (s != null && s.trim().length() > 0)
+ if (s != null && s.trim().length() > 0) {
+ fBestHover= hover;
return s;
+ }
}
return null;
}
-}
+
+ /*
+ * @see org.eclipse.jface.text.ITextHoverExtension#getHoverControlCreator()
+ * @since 3.0
+ */
+ public IInformationControlCreator getHoverControlCreator() {
+ if (fBestHover instanceof ITextHoverExtension)
+ return ((ITextHoverExtension)fBestHover).getHoverControlCreator();
+
+ return null;
+ }
+
+ /*
+ * @see org.eclipse.jface.text.information.IInformationProviderExtension2#getInformationPresenterControlCreator()
+ * @since 3.0
+ */
+ public IInformationControlCreator getInformationPresenterControlCreator() {
+ if (fBestHover instanceof IInformationProviderExtension2)
+ return ((IInformationProviderExtension2)fBestHover).getInformationPresenterControlCreator();
+
+ return null;
+ }
+}
\ No newline at end of file