X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java index 81b66fe..bc388b1 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java @@ -10,7 +10,7 @@ www.phpeclipse.de **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor; -import java.io.FileReader; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -20,6 +20,7 @@ import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.builder.IdentifierIndexManager; import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation; import net.sourceforge.phpeclipse.phpeditor.php.PHPElement; +import net.sourceforge.phpeclipse.phpeditor.php.PHPFunction; import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor; import org.eclipse.core.resources.IProject; @@ -28,102 +29,123 @@ import org.eclipse.jface.text.ITextHover; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; import org.eclipse.swt.graphics.Point; + /** * Implementation for an ITextHover which hovers over PHP code. */ public class PHPTextHover implements ITextHover { - public static HashMap functionDescriptions = null; - private static PHPWordExtractor phpWordDetector = new PHPWordExtractor(); - /** - * The current project; maybe null for preference pages - */ - private IProject fProject; - public PHPTextHover(IProject project) { - fProject = project; - } - /* - * (non-Javadoc) Method declared on ITextHover - */ - public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { - if (hoverRegion != null) { - try { - if (hoverRegion.getLength() > -1) { - String word = textViewer.getDocument().get(hoverRegion.getOffset(), - hoverRegion.getLength()); - if (functionDescriptions == null) { - functionDescriptions = new HashMap(); - ArrayList syntaxbuffer = PHPSyntaxRdr.getSyntaxData(); - String strbuffer = null; - PHPElement elbuffer = null; - if (syntaxbuffer != null) { - for (int i = 0; i < syntaxbuffer.size(); i++) { - elbuffer = (PHPElement) syntaxbuffer.get(i); - functionDescriptions.put(elbuffer.getName(), elbuffer - .getHoverText()); - } - } - // - // while ((syntaxbuffer != null) - // && (!syntaxbuffer.isEmpty() && ((elbuffer = (PHPElement) - // syntaxbuffer.remove(0)) != null))) { - // functionDescriptions.put(elbuffer.getName(), - // elbuffer.getHoverText()); - // } - } - String hoverInfo = - (String) functionDescriptions.get(word); - if (hoverInfo == null && fProject != null) { - // get the possible PHPDoc information from the index file - IdentifierIndexManager indexManager = PHPeclipsePlugin.getDefault() - .getIndexManager(fProject); - List list = indexManager.getLocations(word); - if (list.size() > 0) { - try { - PHPIdentifierLocation location; - String filename; - FileReader phpdocFileReader; - StringBuffer hoverInfoBuffer = new StringBuffer(); - String workspaceLocation; - if (fProject!=null) { - workspaceLocation = fProject.getLocation().toString()+'/'; - } else { - // should never happen? - workspaceLocation = PHPeclipsePlugin.getWorkspace() - .getRoot().getLocation().toString(); - } - // boolean foundPHPdoc = false; - for (int i = 0; i < list.size(); i++) { - location = (PHPIdentifierLocation) list.get(i); - filename = workspaceLocation + location.getFilename(); - PHPDocUtil.appendPHPDoc(hoverInfoBuffer, filename, location); - } - hoverInfo = hoverInfoBuffer.toString(); - } catch (Throwable e) { - // ignore exceptions - // e.printStackTrace(); - } - } - } - return hoverInfo; - } - // } catch (BadLocationException x) { - } catch (Exception x) { - } - } - return null; - // don't show this annoying text - // return "empty selection"; - } - /* - * (non-Javadoc) Method declared on ITextHover - */ - public IRegion getHoverRegion(ITextViewer textViewer, int offset) { - Point selection = PHPWordExtractor.findWord(textViewer.getDocument(), - offset); - // show the extracted word as a tooltip - if (selection != null && selection.x <= offset - && offset < selection.x + selection.y) - return new Region(selection.x, selection.y); - return new Region(offset, 0); - } + private static HashMap functionDescriptions = null; + + private static HashMap identDescriptions = null; + + /** + * The current project; maybe null for preference pages + */ + private IProject fProject; + + public PHPTextHover(IProject project) { + fProject = project; + } + + /* + * (non-Javadoc) Method declared on ITextHover + */ + public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { + if (hoverRegion != null) { + try { + if (hoverRegion.getLength() > -1) { + String word = textViewer.getDocument().get( + hoverRegion.getOffset(), hoverRegion.getLength()); + if (functionDescriptions == null) { + functionDescriptions = new HashMap(); + identDescriptions = new HashMap(); + ArrayList syntaxbuffer = PHPSyntaxRdr.getSyntaxData(); + PHPElement elbuffer = null; + if (syntaxbuffer != null) { + for (int i = 0; i < syntaxbuffer.size(); i++) { + elbuffer = (PHPElement) syntaxbuffer.get(i); + if (elbuffer instanceof PHPFunction) { + functionDescriptions.put( + elbuffer.getName(), elbuffer + .getHoverText()); + } else { + identDescriptions.put(elbuffer.getName(), + elbuffer.getHoverText()); + } + } + } + // + // while ((syntaxbuffer != null) + // && (!syntaxbuffer.isEmpty() && ((elbuffer = + // (PHPElement) + // syntaxbuffer.remove(0)) != null))) { + // functionDescriptions.put(elbuffer.getName(), + // elbuffer.getHoverText()); + // } + } + String hoverInfo = (String) identDescriptions.get(word); + if (hoverInfo == null & word.length() > 0) { + hoverInfo = (String) functionDescriptions.get(word + .toLowerCase()); + } + if (hoverInfo == null && fProject != null) { + // get the possible PHPDoc information from the index + // file + IdentifierIndexManager indexManager = PHPeclipsePlugin + .getDefault().getIndexManager(fProject); + List list = indexManager.getLocations(word); + if (list.size() > 0) { + try { + PHPIdentifierLocation location; + String filename; + StringBuffer hoverInfoBuffer = new StringBuffer(); + String workspaceLocation; + if (fProject != null) { + workspaceLocation = fProject.getFullPath() + .toString() + '/'; + } else { + // should never happen? + workspaceLocation = PHPeclipsePlugin + .getWorkspace().getRoot() + .getFullPath().toString(); + } + // boolean foundPHPdoc = false; + for (int i = 0; i < list.size(); i++) { + location = (PHPIdentifierLocation) list + .get(i); + filename = workspaceLocation + + location.getFilename(); + PHPDocUtil.appendPHPDoc(hoverInfoBuffer, + filename, location); + } + hoverInfo = hoverInfoBuffer.toString(); + } catch (Throwable e) { + // ignore exceptions + // e.printStackTrace(); + } + } + } + return hoverInfo; + } + // } catch (BadLocationException x) { + } catch (Exception x) { + } + } + return null; + // don't show this annoying text + // return "empty selection"; + } + + /* + * (non-Javadoc) Method declared on ITextHover + */ + public IRegion getHoverRegion(ITextViewer textViewer, int offset) { + Point selection = PHPWordExtractor.findWord(textViewer.getDocument(), + offset); + // show the extracted word as a tooltip + if (selection != null && selection.x <= offset + && offset < selection.x + selection.y) + return new Region(selection.x, selection.y); + return new Region(offset, 0); + } }