*** empty log message ***
[phpeclipse.git] / net.sourceforge.phpeclipse / src / test / PHPParser.jj
index b0bb021..e658989 100644 (file)
@@ -1785,19 +1785,93 @@ void StatementExpression() :
 }
 
 void SwitchStatement() :
-{}
 {
-  <SWITCH> <LPAREN> Expression() <RPAREN> <LBRACE>
-    ( SwitchLabel() ( BlockStatement() )* )*
-  <RBRACE>
+  Token breakToken = null;
+  int line;
+}
+{
+  <SWITCH>
+  try {
+    <LPAREN>
+  } catch (ParseException e) {
+    errorMessage = "'(' expected after 'switch'";
+    errorLevel   = ERROR;
+    throw e;
+  }
+  Expression()
+  try {
+    <RPAREN>
+  } catch (ParseException e) {
+    errorMessage = "')' expected";
+    errorLevel   = ERROR;
+    throw e;
+  }
+  try {
+  <LBRACE>
+  } catch (ParseException e) {
+    errorMessage = "'{' expected";
+    errorLevel   = ERROR;
+    throw e;
+  }
+    (
+      line = SwitchLabel()
+      ( BlockStatement() )*
+      [ breakToken = <BREAK> ]
+      {
+        try {
+          if (breakToken == null) {
+            setMarker(fileToParse,
+                      "You should use put a 'break' at the end of your statement",
+                      line,
+                      INFO,
+                      "Line " + line);
+          }
+        } catch (CoreException e) {
+          PHPeclipsePlugin.log(e);
+        }
+      }
+    )*
+  try {
+    <RBRACE>
+  } catch (ParseException e) {
+    errorMessage = "'}' expected";
+    errorLevel   = ERROR;
+    throw e;
+  }
 }
 
-void SwitchLabel() :
-{}
+int SwitchLabel() :
 {
-  <CASE> Expression() <COLON>
+  final Token token;
+}
+{
+  token = <CASE>
+  try {
+    Expression()
+  } catch (ParseException e) {
+    if (errorMessage != null) throw e;
+    errorMessage = "expression expected after 'case' keyword";
+    errorLevel   = ERROR;
+    throw e;
+  }
+  try {
+    <COLON>
+  } catch (ParseException e) {
+    errorMessage = "':' expected after case expression";
+    errorLevel   = ERROR;
+    throw e;
+  }
+  {return token.beginLine;}
 |
-  <_DEFAULT> <COLON>
+  token = <_DEFAULT>
+  try {
+    <COLON>
+  } catch (ParseException e) {
+    errorMessage = "':' expected after 'default' keyword";
+    errorLevel   = ERROR;
+    throw e;
+  }
+  {return token.beginLine;}
 }
 
 void IfStatement() :