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);
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;
+ }
+
}