Changes:
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / phpdoc / PHPDocUtil.java
index 59b8ca3..71db7ae 100644 (file)
@@ -1,9 +1,3 @@
-/*
- * 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;
@@ -12,36 +6,79 @@ import java.io.IOException;
 import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation;
 
 /**
- * @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
-        * 
-        * @param hoverInfoBuffer
-        * @param filename
-        * @param location
-        */
+
+  /**
+   * Generate a PHPDoc hover text if possible
+   * 
+   * @param hoverInfoBuffer
+   * @param filename
+   * @param location
+   */
   public static void appendPHPDoc(StringBuffer hoverInfoBuffer, String filename, PHPIdentifierLocation location) {
+    FileReader phpFileReader;
     hoverInfoBuffer.append(location.toString());
-    hoverInfoBuffer.append('\n');
-    if (location.getPHPDocOffset() >= 0) {
-      FileReader phpdocFileReader;
-      try {
-        phpdocFileReader = new FileReader(filename);
+    hoverInfoBuffer.append(" - \n");
+    try {
+                       hoverInfoBuffer.append( getUsage(filename, location) );
+                       hoverInfoBuffer.append('\n');
 
-        char[] charArray = new char[location.getPHPDocLength()];
-        phpdocFileReader.skip(location.getPHPDocOffset());
-        phpdocFileReader.read(charArray, 0, location.getPHPDocLength());
-        PHPDocCharArrayCommentReader phpdocConverter = new PHPDocCharArrayCommentReader(charArray);
+      //       read the phpdoc for the function
+      if (location.getPHPDocOffset() >= 0) {
+        phpFileReader = new FileReader(filename);
+        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());
         hoverInfoBuffer.append('\n');
-      } catch (IOException e) {
+        phpFileReader.close();
+      }
+
+    } catch (IOException e) {
+      return;
+    }
+  }
+
+  public static String getUsage(String filename, PHPIdentifierLocation location) {
+    FileReader phpFileReader;
+    String usage = location.getUsage();
+    if (usage!=null) {
+       return usage;
+    }
+    usage = "";
+    try {
+                       
+      phpFileReader = new FileReader(filename);
+      // 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;
   }
 }