X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java index 110dd8f..ad5173d 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/phpparser/PHPParser.java @@ -61,7 +61,11 @@ public class PHPParser extends PHPKeywords { Long longNumber; Double doubleNumber; - String stringValue; + private String stringValue; + + /** Contains the current expression. */ + private StringBuffer expression; + private boolean phpMode; final static int TT_EOF = 0; @@ -757,23 +761,11 @@ public class PHPParser extends PHPKeywords { phpMode = true; phpFound = true; break; - } else if (ch2 == 'p') { - ch2 = str.charAt(chIndx++); - if (ch2 == 'h') { - ch2 = str.charAt(chIndx++); - if (ch2 == 'p') { - phpMode = true; - phpFound = true; - break; - } - chIndx--; - } - chIndx--; - } else if (ch2 == 'P') { + } else if (ch2 == 'p' || ch2 == 'P') { ch2 = str.charAt(chIndx++); - if (ch2 == 'H') { + if (ch2 == 'h' || ch2 == 'H') { ch2 = str.charAt(chIndx++); - if (ch2 == 'P') { + if (ch2 == 'p' || ch2 == 'P') { phpMode = true; phpFound = true; break; @@ -1767,9 +1759,9 @@ public class PHPParser extends PHPKeywords { return outlineInfo; } - private void parseDeclarations(PHPOutlineInfo outlineInfo, PHPClassDeclaration current, boolean goBack) { + private void parseDeclarations(PHPOutlineInfo outlineInfo, PHPSegmentWithChildren current, boolean goBack) { // PHPClassDeclaration current = (PHPClassDeclaration) stack.peek(); - PHPClassDeclaration temp; + PHPSegmentWithChildren temp; int counter = 0; String oldIdentifier; IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore(); @@ -1813,8 +1805,10 @@ public class PHPParser extends PHPKeywords { } if (token == TT_IDENTIFIER && store.getBoolean(PHPeclipsePlugin.PHP_OUTLINE_FUNC)) { outlineInfo.addVariable(identifier); - current.add(new PHPFunctionDeclaration(current, identifier, chIndx - identifier.length())); + temp = new PHPFunctionDeclaration(current, identifier, chIndx - identifier.length()); + current.add(temp); getNextToken(); + parseDeclarations(outlineInfo, temp, true); } } else if (token == TT_class) { getNextToken(); @@ -1824,6 +1818,8 @@ public class PHPParser extends PHPKeywords { current.add(temp); // stack.push(temp); getNextToken(); + + //skip tokens for classname, extends and others until we have the opening '{' while (token != TT_LISTOPEN && token != TT_EOF && token != TT_UNDEFINED) { getNextToken(); } @@ -1839,6 +1835,11 @@ public class PHPParser extends PHPKeywords { if (counter == 0 && goBack) { return; } + } else if (token == TT_require || token == TT_require_once || token == TT_include || token == TT_include_once) { + expression(); + outlineInfo.addVariable(identifier); + current.add(new PHPReqIncDeclaration(current, identifier, chIndx - identifier.length(),expression.toString())); + getNextToken(); } else { getNextToken(); } @@ -2671,6 +2672,14 @@ public class PHPParser extends PHPKeywords { } private void expression() throws CoreException { + //todo: find a better way to get the expression + expression = new StringBuffer(); + for (int i = chIndx;i