suppress "variable not initialized" error for break statements. In switch-case statem...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Parser.java
index 2cb48e4..d82979c 100644 (file)
@@ -428,8 +428,13 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                if (branchStatement && statement != null) {
                                        // reportSyntaxError("Unreachable code", statement.sourceStart,
                                        // statement.sourceEnd);
-                                       problemReporter.unreachableCode(new String(scanner.getCurrentIdentifierSource()), statement.sourceStart,
+                                       if (! (statement instanceof BreakStatement)) {
+                                               /* don't give an error for break statement following return statement
+                                               Technically it's unreachable code, but in switch-case it's recommended to
+                                               avoid accidental fall-through later when editing the code */
+                                               problemReporter.unreachableCode(new String(scanner.getCurrentIdentifierSource()), statement.sourceStart,
                                                        statement.sourceEnd, referenceContext, compilationUnit.compilationResult);
+                                       }
                                }
                                if ((token == TokenNameRBRACE) || (token == TokenNamecase) || (token == TokenNamedefault) || (token == TokenNameelse)
                                                || (token == TokenNameelseif) || (token == TokenNameendif) || (token == TokenNameendfor)
@@ -2527,7 +2532,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                                FieldReference ref = (FieldReference) lhs;
                                                if (!containsVariableSet(ref.token)) {
                                                        if (null==initHandler || initHandler.reportError()) {
-                                                               problemReporter.uninitializedLocalVariable(new String(ref.token), ref.sourceStart(), ref.sourceEnd(),
+                                                               problemReporter.uninitializedLocalVariable(new String(ref.token), ref.sourceStart, ref.sourceEnd,
                                                                        referenceContext, compilationUnit.compilationResult);
                                                        }
                                                        addVariableSet(ref.token);
@@ -2553,7 +2558,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                                                        // example:
                                                                        // $var = & new Object();
                                                                        if (fMethodVariables != null) {
-                                                                               VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                                                                               VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart);
                                                                                lhsInfo.reference = classRef;
                                                                                lhsInfo.typeIdentifier = classRef.token;
                                                                                fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
@@ -2569,7 +2574,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                                                if (fMethodVariables != null) {
                                                                        VariableInfo rhsInfo = (VariableInfo) fMethodVariables.get(((FieldReference) rhs).token);
                                                                        if (rhsInfo != null && rhsInfo.reference != null) {
-                                                                               VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                                                                               VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart);
                                                                                lhsInfo.reference = rhsInfo.reference;
                                                                                lhsInfo.typeIdentifier = rhsInfo.typeIdentifier;
                                                                                fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
@@ -2587,7 +2592,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                                                if (fMethodVariables != null) {
                                                                        VariableInfo rhsInfo = (VariableInfo) fMethodVariables.get(((FieldReference) rhs).token);
                                                                        if (rhsInfo != null && rhsInfo.reference != null) {
-                                                                               VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                                                                               VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart);
                                                                                lhsInfo.reference = rhsInfo.reference;
                                                                                lhsInfo.typeIdentifier = rhsInfo.typeIdentifier;
                                                                                fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
@@ -2598,7 +2603,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                                                // example:
                                                                // $var = new Object();
                                                                if (fMethodVariables != null) {
-                                                                       VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                                                                       VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart);
                                                                        lhsInfo.reference = (SingleTypeReference) rhs;
                                                                        lhsInfo.typeIdentifier = ((SingleTypeReference) rhs).token;
                                                                        fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
@@ -2609,7 +2614,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
                                        }
                                        if (rememberedVar == false && lhs != null && lhs instanceof FieldReference) {
                                                if (fMethodVariables != null) {
-                                                       VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart());
+                                                       VariableInfo lhsInfo = new VariableInfo(((FieldReference) lhs).sourceStart);
                                                        fMethodVariables.put(new String(((FieldReference) lhs).token), lhsInfo);
                                                }
                                        }