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 c947cf6..81b66fe 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPTextHover.java @@ -1,22 +1,21 @@ /********************************************************************** -Copyright (c) 2000, 2002 IBM Corp. and others. -All rights reserved. This program and the accompanying materials -are made available under the terms of the Common Public License v1.0 -which accompanies this distribution, and is available at -http://www.eclipse.org/legal/cpl-v10.html + Copyright (c) 2000, 2002 IBM Corp. and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Common Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/cpl-v10.html -Contributors: - IBM Corporation - Initial implementation - Klaus Hartlage - www.eclipseproject.de -**********************************************************************/ + Contributors: + IBM Corporation - Initial implementation + www.phpeclipse.de + **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor; - import java.io.FileReader; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Vector; -import net.sourceforge.phpdt.internal.corext.phpdoc.PHPDocCharArrayCommentReader; +import net.sourceforge.phpdt.internal.corext.phpdoc.PHPDocUtil; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.builder.IdentifierIndexManager; import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation; @@ -29,80 +28,76 @@ 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. + * 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 + /* + * (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()); + String word = textViewer.getDocument().get(hoverRegion.getOffset(), + hoverRegion.getLength()); if (functionDescriptions == null) { functionDescriptions = new HashMap(); - // PHPSyntaxRdr syntaxRdr = new PHPSyntaxRdr(); - // syntaxRdr.readInSyntax(); - - // Vector syntaxbuffer = syntaxRdr.getsyntaxdata(); - Vector syntaxbuffer = PHPSyntaxRdr.getsyntaxdata(); + ArrayList syntaxbuffer = PHPSyntaxRdr.getSyntaxData(); String strbuffer = null; PHPElement elbuffer = null; - while ((syntaxbuffer != null) - && (!syntaxbuffer.isEmpty() && ((elbuffer = (PHPElement) syntaxbuffer.remove(0)) != null))) { - functionDescriptions.put(elbuffer.getName(), elbuffer.getHoverText()); + if (syntaxbuffer != null) { + for (int i = 0; i < syntaxbuffer.size(); i++) { + elbuffer = (PHPElement) syntaxbuffer.get(i); + functionDescriptions.put(elbuffer.getName(), elbuffer + .getHoverText()); + } } - - // functionDescriptions = new HashMap(997); - // for (int i=0; i 0) { try { PHPIdentifierLocation location; String filename; FileReader phpdocFileReader; - PHPDocCharArrayCommentReader phpdocConverter; StringBuffer hoverInfoBuffer = new StringBuffer(); - String workspaceLocation = PHPeclipsePlugin.getWorkspace().getRoot().getLocation().toString(); + 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(); - hoverInfoBuffer.append(location.toString()); - hoverInfoBuffer.append('\n'); - if (location.getPHPDocOffset() >= 0) { - // foundPHPdoc = true; - phpdocFileReader = new FileReader(filename); - char[] charArray = new char[location.getPHPDocLength()]; - phpdocFileReader.skip(location.getPHPDocOffset()); - phpdocFileReader.read(charArray, 0, location.getPHPDocLength()); - phpdocConverter = new PHPDocCharArrayCommentReader(charArray); - hoverInfoBuffer.append(phpdocConverter.getString()); - hoverInfoBuffer.append('\n'); - } + filename = workspaceLocation + location.getFilename(); + PHPDocUtil.appendPHPDoc(hoverInfoBuffer, filename, location); } - // if (foundPHPdoc) { hoverInfo = hoverInfoBuffer.toString(); - // } } catch (Throwable e) { // ignore exceptions // e.printStackTrace(); @@ -115,16 +110,19 @@ public class PHPTextHover implements ITextHover { } catch (Exception x) { } } - return "empty selection"; + return null; + // don't show this annoying text + // return "empty selection"; } - - /* (non-Javadoc) - * Method declared on ITextHover + /* + * (non-Javadoc) Method declared on ITextHover */ public IRegion getHoverRegion(ITextViewer textViewer, int offset) { - Point selection = PHPWordExtractor.findWord(textViewer.getDocument(), 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) + if (selection != null && selection.x <= offset + && offset < selection.x + selection.y) return new Region(selection.x, selection.y); return new Region(offset, 0); }