X-Git-Url: http://secure.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..a9da92f 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 @@ -10,10 +10,7 @@ *******************************************************************************/ 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,91 +18,65 @@ 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.ui.IEditorPart; +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(); } - public BestMatchHover(IEditorPart editor) { - this(); - setEditor(editor); - } - +// public BestMatchHover(IEditorPart editor) { +// this(); +// setEditor(editor); +// } + /** * Installs all text hovers. */ private void installTextHovers() { - + // initialize lists - indicates that the initialization happened - fTextHoverSpecifications= new ArrayList(2); - fInstantiatedTextHovers= new ArrayList(2); + fTextHoverSpecifications = new ArrayList(2); + fInstantiatedTextHovers = new ArrayList(2); // populate list - JavaEditorTextHoverDescriptor[] hoverDescs= PHPeclipsePlugin.getDefault().getJavaEditorTextHoverDescriptors(); - for (int i= 0; i < hoverDescs.length; i++) { + JavaEditorTextHoverDescriptor[] hoverDescs = PHPeclipsePlugin + .getDefault().getJavaEditorTextHoverDescriptors(); + for (int i = 0; i < hoverDescs.length; i++) { // ensure that we don't add ourselves to the list - if (!PreferenceConstants.ID_BESTMATCH_HOVER.equals(hoverDescs[i].getId())) + if (!PreferenceConstants.ID_BESTMATCH_HOVER.equals(hoverDescs[i] + .getId())) fTextHoverSpecifications.add(hoverDescs[i]); } - Collections.sort(fTextHoverSpecifications, new JavaEditorTextHoverDescriptorComparator()); - } + } private void checkTextHovers() { if (fTextHoverSpecifications.size() == 0) return; - for (Iterator iterator= new ArrayList(fTextHoverSpecifications).iterator(); iterator.hasNext(); ) { - JavaEditorTextHoverDescriptor spec= (JavaEditorTextHoverDescriptor) iterator.next(); + for (Iterator iterator = new ArrayList(fTextHoverSpecifications) + .iterator(); iterator.hasNext();) { + JavaEditorTextHoverDescriptor spec = (JavaEditorTextHoverDescriptor) iterator + .next(); - IJavaEditorTextHover hover= spec.createTextHover(); + IJavaEditorTextHover hover = spec.createTextHover(); if (hover != null) { hover.setEditor(getEditor()); addTextHover(hover); @@ -125,18 +96,45 @@ 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(); + for (Iterator iterator = fInstantiatedTextHovers.iterator(); iterator + .hasNext();) { + ITextHover hover = (ITextHover) iterator.next(); - String s= hover.getHoverInfo(textViewer, hoverRegion); - if (s != null && s.trim().length() > 0) + String s = hover.getHoverInfo(textViewer, hoverRegion); + 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