Modified: separate code for 'define'. was shown unnecessary closing parenthesis.
authortoshihiro <toshihiro>
Tue, 14 Aug 2007 02:11:58 +0000 (02:11 +0000)
committertoshihiro <toshihiro>
Tue, 14 Aug 2007 02:11:58 +0000 (02:11 +0000)
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/phpdoc/PHPDocUtil.java

index 5bf73a7..426a5e9 100644 (file)
@@ -93,15 +93,21 @@ public class PHPDocUtil {
                                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;
+                               if (location.isDefine()) {
+                                       length = getClosingParenthesis(functionDeclarationCharArray);
+                                       if (length < 0)
+                                               return "";
+                               } else {
+                                       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);
@@ -134,4 +140,42 @@ public class PHPDocUtil {
                return null;
        }
 
+       private static int getClosingParenthesis(char[] buffer) {
+               int p = 0;
+               boolean dq = false;
+               boolean sq = false;
+
+               for (int i = 0; i < buffer.length; i++) {
+                       if (buffer[i] == '\\') {
+                               i++;
+                               continue;
+                       }
+                       if (dq) {
+                               dq = (buffer[i] != '"');
+                               continue;
+                       }
+                       if (sq) {
+                               sq = (buffer[i] != '\'');
+                               continue;
+                       }
+                       switch (buffer[i]) {
+                       case '(':
+                               p++;
+                               break;
+                       case ')':
+                               p--;
+                               if (p < 0)
+                                       return i;
+                               break;
+                       case '"':
+                               dq = true;
+                               break;
+                       case '\'':
+                               sq = true;
+                               break;
+                       }
+               }
+               return -1;
+       }
+
 }