Eclipse 3M7
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / text / java / hover / BestMatchHover.java
index 88cd055..cb927fb 100644 (file)
  *******************************************************************************/
 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 +18,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 +61,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 +90,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#getInformationControlCreator()
+        * @since 3.0
+        */
+       public IInformationControlCreator getInformationControlCreator() {
+               if (fBestHover instanceof ITextHoverExtension)
+                       return ((ITextHoverExtension)fBestHover).getInformationControlCreator();
+
+               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;
+       }
 }