X-Git-Url: http://secure.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 cc93029..308f746 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java @@ -11,12 +11,19 @@ Contributors: **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor; +import java.io.FileReader; +import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Vector; +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.PHPWordExtractor; +import org.eclipse.core.resources.IProject; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextHover; import org.eclipse.jface.text.ITextViewer; @@ -24,14 +31,18 @@ import org.eclipse.jface.text.Region; import org.eclipse.swt.graphics.Point; /** - * Example implementation for an ITextHover + * 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(); - + private IProject fProject; + + public PHPTextHover(IProject project) { + fProject = project; + } /* (non-Javadoc) * Method declared on ITextHover */ @@ -50,8 +61,7 @@ public class PHPTextHover implements ITextHover { String strbuffer = null; PHPElement elbuffer = null; while ((syntaxbuffer != null) - && (!syntaxbuffer.isEmpty() && - ((elbuffer = (PHPElement) syntaxbuffer.remove(0)) != null))) { + && (!syntaxbuffer.isEmpty() && ((elbuffer = (PHPElement) syntaxbuffer.remove(0)) != null))) { functionDescriptions.put(elbuffer.getName(), elbuffer.getHoverText()); } @@ -60,7 +70,45 @@ public class PHPTextHover implements ITextHover { // functionDescriptions.put(PHPFunctionNasmes.FUNCTION_NAMES[i],PHPFunctionDescription.FUNCTION_DESCRIPTION[i]); // } } - return (String) functionDescriptions.get(word); + 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 = PHPeclipsePlugin.getWorkspace().getRoot().getLocation().toString(); + boolean foundPHPdoc = false; + for (int i = 0; i < list.size(); i++) { + location = (PHPIdentifierLocation) list.get(0); + if (location.getPHPDocOffset() >= 0) { + foundPHPdoc = true; + filename = workspaceLocation + location.getFilename(); + phpdocFileReader = new FileReader(filename); + hoverInfoBuffer.append("PHPdoc found in file: "); + hoverInfoBuffer.append(filename); + hoverInfoBuffer.append('\n'); + char[] charArray = new char[location.getPHPDocLength()]; + phpdocFileReader.skip(location.getPHPDocOffset()); + phpdocFileReader.read(charArray, 0, location.getPHPDocLength()); + hoverInfoBuffer.append(charArray); + hoverInfoBuffer.append('\n'); + } + } + if (foundPHPdoc) { + hoverInfo = hoverInfoBuffer.toString(); + } + } catch (Throwable e) { + // ignore exceptions + // e.printStackTrace(); + } + } + } + return hoverInfo; } // } catch (BadLocationException x) { } catch (Exception x) {