X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java index 88cd055..5b5e1cf 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/java/hover/BestMatchHover.java @@ -9,11 +9,7 @@ * 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; @@ -21,54 +17,23 @@ import net.sourceforge.phpdt.ui.PreferenceConstants; 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(); @@ -95,7 +60,6 @@ public class BestMatchHover extends AbstractJavaEditorTextHover { if (!PreferenceConstants.ID_BESTMATCH_HOVER.equals(hoverDescs[i].getId())) fTextHoverSpecifications.add(hoverDescs[i]); } - Collections.sort(fTextHoverSpecifications, new JavaEditorTextHoverDescriptorComparator()); } private void checkTextHovers() { @@ -125,18 +89,43 @@ public class BestMatchHover extends AbstractJavaEditorTextHover { 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