X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java
index 59b8ca3..9b30f8b 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java
@@ -1,24 +1,21 @@
-/*
- * Created on 20.09.2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
package net.sourceforge.phpdt.internal.corext.phpdoc;
-import java.io.FileReader;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+
/**
- * @author khartlage
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
+ * Utility class for static PHPdoc helper mehods
*/
public class PHPDocUtil {
-
+
/**
* Generate a PHPDoc hover text if possible
*
@@ -26,22 +23,93 @@ public class PHPDocUtil {
* @param filename
* @param location
*/
- public static void appendPHPDoc(StringBuffer hoverInfoBuffer, String filename, PHPIdentifierLocation location) {
- hoverInfoBuffer.append(location.toString());
- hoverInfoBuffer.append('\n');
- if (location.getPHPDocOffset() >= 0) {
- FileReader phpdocFileReader;
- try {
- phpdocFileReader = new FileReader(filename);
-
- char[] charArray = new char[location.getPHPDocLength()];
- phpdocFileReader.skip(location.getPHPDocOffset());
- phpdocFileReader.read(charArray, 0, location.getPHPDocLength());
- PHPDocCharArrayCommentReader phpdocConverter = new PHPDocCharArrayCommentReader(charArray);
- hoverInfoBuffer.append(phpdocConverter.getString());
- hoverInfoBuffer.append('\n');
- } catch (IOException e) {
- }
- }
- }
+ public static void appendPHPDoc(StringBuffer hoverInfoBuffer,
+ String filename, PHPIdentifierLocation location) {
+ hoverInfoBuffer.append(location.toString());
+ hoverInfoBuffer.append(" - ");
+ try {
+ hoverInfoBuffer.append(getUsage(filename, location));
+ hoverInfoBuffer.append("
");
+
+ // read the phpdoc for the function
+ if (location.getPHPDocOffset() >= 0) {
+ String encoding = getEncoding(filename);
+ InputStreamReader phpFileReader = new InputStreamReader(
+ new FileInputStream(filename), encoding);
+ char[] phpDocDeclarationCharArray = new char[location
+ .getPHPDocLength()];
+ phpFileReader.skip(location.getPHPDocOffset());
+ phpFileReader.read(phpDocDeclarationCharArray, 0, location
+ .getPHPDocLength());
+ PHPDocCharArrayCommentReader phpdocConverter = new PHPDocCharArrayCommentReader(
+ phpDocDeclarationCharArray);
+ hoverInfoBuffer.append(phpdocConverter.getString());
+ phpFileReader.close();
+ }
+
+ } catch (IOException e) {
+ // TODO: smell
+ return;
+ }
+ }
+
+ static String getEncoding(String filename) {
+ String encoding = null;
+ IFile file = PHPeclipsePlugin.getWorkspace().getRoot()
+ .getFileForLocation(new Path(filename));
+ if (file != null) {
+ try {
+ encoding = file.getCharset();
+ } catch (CoreException e) {
+ // TODO: should log the fact that we could not get the encoding?
+ }
+ }
+ return encoding;
+ }
+
+ public static String getUsage(String filename,
+ PHPIdentifierLocation location) {
+ String usage = location.getUsage();
+ if (usage != null) {
+ return usage;
+ }
+ usage = "";
+ try {
+
+ String encoding = getEncoding(filename);
+ InputStreamReader phpFileReader = new InputStreamReader(
+ new FileInputStream(filename), encoding);
+ // read the function declaration
+ if (location.getOffset() >= 0
+ && (location.isMethod() || location.isConstructor()
+ || location.isFunction() || location.isDefine())) {
+ char[] functionDeclarationCharArray = new char[256];
+ int offset = location.getOffset();
+ phpFileReader.skip(offset);
+ int length = phpFileReader.read(functionDeclarationCharArray,
+ 0, 256);
+ if (length == -1) {
+ length = 256;
+ }
+ for (int i = 0; i < length; i++) {
+ if (functionDeclarationCharArray[i] == ')') {
+ length = i + 1;
+ break;
+ }
+ if (functionDeclarationCharArray[i] == '{'
+ || functionDeclarationCharArray[i] == '}') {
+ length = i;
+ break;
+ }
+ }
+ usage = new String(functionDeclarationCharArray, 0, length);
+ }
+ phpFileReader.close();
+ } catch (IOException e) {
+ // do nothing
+ }
+ // cache the usage string:
+ location.setUsage(usage);
+ return usage;
+ }
}