From 9f328d59fdb724d320328008df1bca117beb9773 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 4 Jan 2024 15:32:00 -0500 Subject: [PATCH 1/3] Fix code generation for record patterns Fixes #1804 Signed-off-by: David Thompson --- .../internal/compiler/ast/GuardedPattern.java | 4 + .../compiler/ast/InstanceOfExpression.java | 19 ++- .../jdt/internal/compiler/ast/Pattern.java | 5 + .../internal/compiler/ast/RecordPattern.java | 7 + .../internal/compiler/ast/TypePattern.java | 7 + .../regression/RecordPatternTest.java | 144 ++++++++++++++++++ 6 files changed, 184 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java index bfd62b1168b..78b257055fe 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java @@ -186,6 +186,10 @@ public void wrapupGeneration(CodeStream codeStream) { this.primaryPattern.wrapupGeneration(codeStream); } @Override + public void fullWrapupGeneration(CodeStream codeStream) { + this.primaryPattern.fullWrapupGeneration(codeStream); + } + @Override protected void generatePatternVariable(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel) { this.primaryPattern.generatePatternVariable(currentScope, codeStream, trueLabel, falseLabel); diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java index 305ffd14e1c..42e9c47f116 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/InstanceOfExpression.java @@ -117,7 +117,7 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean int pc = codeStream.position; - if (this.elementVariable != null) { + if (this.elementVariable != null || this.pattern != null) { addAssignment(currentScope, codeStream, this.secretInstanceOfPatternExpressionValue); codeStream.load(this.secretInstanceOfPatternExpressionValue); } else { @@ -125,7 +125,22 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean } codeStream.instance_of(this.type, this.type.resolvedType); - if (this.elementVariable != null) { + if (this.pattern != null) { + BranchLabel trueLabel = new BranchLabel(codeStream); + BranchLabel falseLabel = new BranchLabel(codeStream); + BranchLabel continueLabel = new BranchLabel(codeStream); + codeStream.ifeq(falseLabel); + codeStream.load(this.secretInstanceOfPatternExpressionValue); + this.pattern.generateOptimizedBoolean(currentScope, codeStream, trueLabel, falseLabel); + this.pattern.fullWrapupGeneration(codeStream); + codeStream.removeVariable(this.secretInstanceOfPatternExpressionValue); + trueLabel.place(); + codeStream.iconst_1(); + codeStream.goto_(continueLabel); + falseLabel.place(); + codeStream.iconst_0(); + continueLabel.place(); + } else if (this.elementVariable != null) { BranchLabel actionLabel = new BranchLabel(codeStream); codeStream.dup(); codeStream.ifeq(actionLabel); diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java index 77fc1ebc3cf..95ed7d07ee8 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java @@ -103,6 +103,11 @@ public void resumeVariables(CodeStream codeStream, BlockScope scope) { protected abstract void generatePatternVariable(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel); protected abstract void wrapupGeneration(CodeStream codeStream); + /** + * Clean up all variables (actual and secret) used in this pattern and child patterns. + */ + protected abstract void fullWrapupGeneration(CodeStream codeStream); + public TypeReference getType() { return null; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java index 34a4687d7d8..2c996f67566 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java @@ -354,6 +354,13 @@ public void wrapupGeneration(CodeStream codeStream) { super.wrapupGeneration(codeStream); } @Override + public void fullWrapupGeneration(CodeStream codeStream) { + for (Pattern p : this.patterns) { + p.fullWrapupGeneration(codeStream); + } + super.fullWrapupGeneration(codeStream); + } + @Override public void suspendVariables(CodeStream codeStream, BlockScope scope) { codeStream.removeNotDefinitelyAssignedVariables(scope, this.thenInitStateIndex1); } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TypePattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TypePattern.java index dc5bd0f36d3..189340ba6df 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TypePattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TypePattern.java @@ -109,6 +109,13 @@ public void wrapupGeneration(CodeStream codeStream) { codeStream.removeVariable(this.secretPatternVariable); } @Override + public void fullWrapupGeneration(CodeStream codeStream) { + this.wrapupGeneration(codeStream); + if (this.local != null) { + codeStream.removeVariable(this.local.binding); + } + } + @Override public LocalDeclaration getPatternVariable() { return this.local; } diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/RecordPatternTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/RecordPatternTest.java index 00c54cdb8bc..1c8a458a9a8 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/RecordPatternTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/RecordPatternTest.java @@ -3613,4 +3613,148 @@ public static void main(String[] args) { "s = switch on null\n" + "s = default threw exception"); } + public void testIssue1804_0() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a) {} + public static void main(String[] args) { + Box b = new Box<>(null); + boolean res = b instanceof Box(Paper a); + if (res) { + System.out.println("res is true"); + } else { + System.out.println("res is false"); + } + } + } + """ }, "res is false"); + } + public void testIssue1804_1() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a) {} + public static void main(String[] args) { + Box b = new Box<>(new Paper(0)); + boolean res = b instanceof Box(Paper a); + if (res) { + System.out.println("res is true"); + } else { + System.out.println("res is false"); + } + } + } + """ }, "res is true"); + } + public void testIssue1804_2() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a) {} + public static void main(String[] args) { + Box b = new Box<>(new Paper(0)); + boolean res = b instanceof Box(Paper a) && a == null; + if (res) { + System.out.println("res is true"); + } else { + System.out.println("res is false"); + } + } + } + """ }, "res is false"); + } + public void testIssue1804_3() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a) {} + public static void main(String[] args) { + Box b = new Box<>(null); + System.out.println(b instanceof Box(Paper a)); + System.out.println(b instanceof Box(Object a)); + } + } + """ }, "false\ntrue"); + } + public void testIssue1804_4() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a) {} + public static void main(String argv[]) { + foo(null, null); + } + public static void foo(String abc, String def) { + Box p = new Box<>(new Paper(0)); + boolean b = false; + switch (p) { + case Box(Paper a) -> { + b = true; + break; + } + default -> { + b = false; + break; + } + } + System.out.println(b); + } + } + """ }, "true"); + } + public void testIssue1804_5() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a) {} + public static void main(String argv[]) { + foo(null, null); + } + public static void foo(String abc, String def) { + Box p = new Box<>(null); + boolean b = false; + switch (p) { + case Box(Paper a) -> { + b = true; + break; + } + default -> { + b = false; + break; + } + } + System.out.println(b); + } + } + """ }, "false"); + } + public void testIssue1804_6() { + runConformTest(new String[] { "X.java", """ + public class X { + record Paper(int color) {} + record Box(T a, T b) {} + public static void main(String argv[]) { + foo(null, null); + } + public static void foo(String abc, String def) { + Box p = new Box<>(new Paper(0), new Paper(1)); + boolean c = false; + switch (p) { + case Box(Paper a, Paper b) -> { + System.out.println(a.color); + System.out.println(b.color); + c = true; + break; + } + default -> { + c = false; + break; + } + } + System.out.println(c); + } + } + """ }, "0\n1\ntrue"); + } } From 9ebc6a2765ff1e3d8122ec77ff475cca86cd5536 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 24 Nov 2023 15:38:27 -0500 Subject: [PATCH 2/3] Parse multiple Patterns in a case statement Second part of JEP 443. Change the parser so that it can parse a list of Patterns in a case. Change GuardedPattern AST (internal and and API) so that it has a list of patterns as its child instead of just one. Modify some tests that use record patterns with a variable (eg. `MyPoint(int x, int y) p` vs `MyPoint(int x, int y)`), since this syntax was only ever used in the preview version of the feature and is no longer allowed. Signed-off-by: David Thompson --- .../grammar/java.g | 35 +- .../eclipse/jdt/core/compiler/IProblem.java | 4 + .../internal/compiler/ast/CaseStatement.java | 30 +- .../internal/compiler/ast/GuardedPattern.java | 99 ++- .../jdt/internal/compiler/parser/Parser.java | 696 +++++++-------- .../parser/ParserBasicInformation.java | 20 +- .../jdt/internal/compiler/parser/Scanner.java | 37 +- .../compiler/parser/TerminalTokens.java | 46 +- .../jdt/internal/compiler/parser/parser1.rsc | Bin 37454 -> 37444 bytes .../jdt/internal/compiler/parser/parser10.rsc | Bin 644 -> 646 bytes .../jdt/internal/compiler/parser/parser11.rsc | Bin 644 -> 646 bytes .../jdt/internal/compiler/parser/parser12.rsc | Bin 644 -> 646 bytes .../jdt/internal/compiler/parser/parser13.rsc | Bin 644 -> 646 bytes .../jdt/internal/compiler/parser/parser14.rsc | Bin 2502 -> 2512 bytes .../jdt/internal/compiler/parser/parser15.rsc | Bin 1678 -> 1684 bytes .../jdt/internal/compiler/parser/parser16.rsc | Bin 2526 -> 2528 bytes .../jdt/internal/compiler/parser/parser17.rsc | Bin 957 -> 962 bytes .../jdt/internal/compiler/parser/parser18.rsc | Bin 17590 -> 17738 bytes .../jdt/internal/compiler/parser/parser19.rsc | Bin 644 -> 646 bytes .../jdt/internal/compiler/parser/parser2.rsc | Bin 35540 -> 35520 bytes .../jdt/internal/compiler/parser/parser20.rsc | Bin 19162 -> 19354 bytes .../jdt/internal/compiler/parser/parser21.rsc | Bin 7656 -> 7696 bytes .../jdt/internal/compiler/parser/parser22.rsc | Bin 882 -> 890 bytes .../jdt/internal/compiler/parser/parser23.rsc | Bin 100 -> 100 bytes .../jdt/internal/compiler/parser/parser24.rsc | Bin 882 -> 890 bytes .../jdt/internal/compiler/parser/parser3.rsc | Bin 2526 -> 2528 bytes .../jdt/internal/compiler/parser/parser4.rsc | Bin 3970 -> 3970 bytes .../jdt/internal/compiler/parser/parser5.rsc | Bin 2526 -> 2528 bytes .../jdt/internal/compiler/parser/parser6.rsc | Bin 1698 -> 1688 bytes .../jdt/internal/compiler/parser/parser7.rsc | Bin 282 -> 282 bytes .../jdt/internal/compiler/parser/parser8.rsc | Bin 882 -> 890 bytes .../jdt/internal/compiler/parser/parser9.rsc | Bin 17552 -> 17638 bytes .../compiler/parser/readableNames.props | 8 +- .../compiler/problem/ProblemReporter.java | 8 + .../compiler/problem/messages.properties | 1 + .../regression/CompilerInvocationTests.java | 2 + .../regression/RecordPatternTest.java | 29 +- .../regression/SwitchPatternTest.java | 817 +++++++++--------- .../formatter/FormatterRegressionTests.java | 46 +- .../CompletionTestsForRecordPattern.java | 12 +- .../tests/model/JavaSearchBugs19Tests.java | 6 +- .../tests/model/JavaSearchBugs21Tests.java | 169 ++++ .../core/tests/model/RunJavaSearchTests.java | 6 +- .../ASTRewritingSwitchPatternTest.java | 2 +- .../codeassist/select/SelectionParser.java | 22 +- .../eclipse/jdt/core/dom/ASTConverter.java | 4 +- .../eclipse/jdt/core/dom/GuardedPattern.java | 92 +- .../internal/core/dom/NaiveASTFlattener.java | 4 +- .../core/dom/rewrite/ASTRewriteAnalyzer.java | 2 +- .../core/dom/rewrite/ASTRewriteFlattener.java | 4 +- 50 files changed, 1299 insertions(+), 902 deletions(-) create mode 100644 org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs21Tests.java diff --git a/org.eclipse.jdt.core.compiler.batch/grammar/java.g b/org.eclipse.jdt.core.compiler.batch/grammar/java.g index dcd8957191a..dfc86bb8a97 100644 --- a/org.eclipse.jdt.core.compiler.batch/grammar/java.g +++ b/org.eclipse.jdt.core.compiler.batch/grammar/java.g @@ -235,7 +235,7 @@ Goal ::= '->' SwitchLabelCaseLhs Goal ::= RestrictedIdentifiersealed Modifiersopt Goal ::= RestrictedIdentifierpermits PermittedSubclasses -- jsr 427 -- -Goal ::= BeginCaseElement Pattern +Goal ::= CaseLabelPatternElements Goal ::= RestrictedIdentifierWhen Expression /:$readableName Goal:/ @@ -1598,34 +1598,41 @@ SwitchLabelCaseLhs ::= 'case' CaseLabelElements -- END SwitchExpression (JEP 325) -- -CaseLabelElements -> CaseLabelElement -CaseLabelElements ::= CaseLabelElements ',' CaseLabelElement +CaseLabelElements -> CaseLabelConstantElements +CaseLabelElements -> CaseLabelPatternElements + +CaseLabelConstantElements ::= CaseLabelConstantElement +CaseLabelConstantElements ::= CaseLabelConstantElements ',' CaseLabelConstantElement /.$putCase consumeCaseLabelElements(); $break ./ -/:$readableName CaseLabelElements:/ +/:$readableName CaseLabelConstantElements:/ -- Production name hardcoded in parser. Must be ::= and not -> (need to hook at cCLE) -CaseLabelElement ::= ConstantExpression +CaseLabelConstantElement ::= ConstantExpression /.$putCase consumeCaseLabelElement(CaseLabelKind.CASE_EXPRESSION); $break ./ /:$readableName CaseLabelElement:/ -- following 'null' in CASE_EXPRESSION - passes through existing grammar -- CaseLabelElement -> 'null' -CaseLabelElement ::= 'default' +CaseLabelConstantElement ::= 'default' /.$putCase consumeCaseLabelElement(CaseLabelKind.CASE_DEFAULT); $break ./ /:$readableName CaseLabelElement:/ -CaseLabelElement ::= CaseLabelElementPattern -/.$putCase consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); $break ./ +CaseLabelPatternElements ::= CaseLabelPatternElementsInternal /:$readableName CaseLabelElement:/ -CaseLabelElement ::= CaseLabelElementPattern Guard -/.$putCase consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); $break ./ -/:$readableName CaseLabelElement:/ +CaseLabelPatternElementsInternal ::= BeginCaseElement CasePatternList +CaseLabelPatternElementsInternal ::= BeginCaseElement CasePatternList Guard -CaseLabelElementPattern ::= BeginCaseElement Pattern -/.$putCase consumeCaseLabelElementPattern(); $break ./ -/:$readableName CaseLabelElementPattern:/ +CasePatternList ::= CasePattern +/:$readableName CasePatternList :/ +CasePatternList ::= CasePatternList ',' CasePattern +/.$putCase consumeCaseLabelElements(); $break ./ +/:$readableName CasePatternList :/ + +CasePattern ::= Pattern +/.$putCase consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); $break ./ +/:$readableName CasePattern:/ Guard ::= RestrictedIdentifierWhen Expression /.$putCase consumeGuard(); $break ./ diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/core/compiler/IProblem.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/core/compiler/IProblem.java index 6f36cbb4911..a4239589720 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/core/compiler/IProblem.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/core/compiler/IProblem.java @@ -2576,6 +2576,10 @@ public interface IProblem { */ int IllegalRecordPattern = TypeRelated + 1941; + /** + * @since 3.37 + */ + int CaseLabelWithPatternMustHaveExactlyOnePattern = Internal + 1942; /** * @since 3.35 diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java index 7fd247f97d5..69b8442659d 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java @@ -260,10 +260,14 @@ private Expression getFirstValidExpression(BlockScope scope, SwitchStatement swi if (e instanceof Pattern) { scope.problemReporter().validateJavaFeatureSupport(JavaFeature.PATTERN_MATCHING_IN_SWITCH, e.sourceStart, e.sourceEnd); - if (this.constantExpressions.length > 1) { - scope.problemReporter().illegalCaseConstantCombination(e); - return e; + if (this.constantExpressions.length > 1 || e instanceof GuardedPattern gp && gp.patterns.length > 1) { + PatternVariableCounter myVisitor = new PatternVariableCounter(); + this.traverse(myVisitor, scope); + if (myVisitor.numVars > 0) { + scope.problemReporter().illegalCaseLabelWithMultiplePatterns(this); + } } + return e; } else if (e instanceof NullLiteral) { scope.problemReporter().validateJavaFeatureSupport(JavaFeature.PATTERN_MATCHING_IN_SWITCH, e.sourceStart, e.sourceEnd); @@ -543,4 +547,24 @@ public LocalDeclaration getLocalDeclaration() { return patternVariableIntroduced; } +private class PatternVariableCounter extends ASTVisitor { + + public int numVars = 0; + + @Override + public boolean visit(TypePattern pattern, BlockScope scope) { + if (pattern.local != null && (pattern.local.name.length != 1 || pattern.local.name[0] != '_') && !"\\u005F".equals(pattern.local.name.toString())) { //$NON-NLS-1$ + this.numVars++; + } + return true; + } + + @Override + public boolean visit(RecordPattern pattern, BlockScope scope) { + if (pattern.local != null && (pattern.local.name.length != 1 || pattern.local.name[0] != '_') && !"\\u005F".equals(pattern.local.name.toString())) { //$NON-NLS-1$ + this.numVars++; + } + return true; + } +} } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java index 78b257055fe..9d14da29eb2 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java @@ -27,34 +27,49 @@ public class GuardedPattern extends Pattern { - public Pattern primaryPattern; + public Pattern[] patterns; public Expression condition; int thenInitStateIndex1 = -1; int thenInitStateIndex2 = -1; public int restrictedIdentifierStart = -1; // used only for 'when' restricted keyword. - public GuardedPattern(Pattern primaryPattern, Expression conditionalAndExpression) { - this.primaryPattern = primaryPattern; + public GuardedPattern(Pattern patterns[], Expression conditionalAndExpression) { + this.patterns = patterns; this.condition = conditionalAndExpression; - this.sourceStart = primaryPattern.sourceStart; + if (patterns.length > 0) { + this.sourceStart = this.patterns[0].sourceStart; + } else { + this.sourceStart = conditionalAndExpression.sourceStart; + } this.sourceEnd = conditionalAndExpression.sourceEnd; } @Override public LocalDeclaration getPatternVariable() { - return this.primaryPattern.getPatternVariable(); + if (this.patterns.length == 1) { + return this.patterns[0].getPatternVariable(); + } + return null; } @Override public LocalVariableBinding[] bindingsWhenTrue() { - return LocalVariableBinding.merge(this.primaryPattern.bindingsWhenTrue(), - this.condition.bindingsWhenTrue()); + LocalVariableBinding[] patternsBindings = new LocalVariableBinding[] {}; + for (Pattern pattern : this.patterns) { + patternsBindings = LocalVariableBinding.merge(patternsBindings, pattern.bindingsWhenTrue()); + } + return LocalVariableBinding.merge(patternsBindings, this.condition.bindingsWhenTrue()); } @Override public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { - flowInfo = this.primaryPattern.analyseCode(currentScope, flowContext, flowInfo); - this.thenInitStateIndex1 = currentScope.methodScope().recordInitializationStates(flowInfo); + if (this.patterns.length >= 1) { + flowInfo = this.patterns[0].analyseCode(currentScope, flowContext, flowInfo); + this.thenInitStateIndex1 = currentScope.methodScope().recordInitializationStates(flowInfo); + } + for (int i = 1; i < this.patterns.length; i++) { + flowInfo = this.patterns[i].analyseCode(currentScope, flowContext, flowInfo); + } FlowInfo mergedFlow = this.condition.analyseCode(currentScope, flowContext, flowInfo); mergedFlow = mergedFlow.safeInitsWhenTrue(); this.thenInitStateIndex2 = currentScope.methodScope().recordInitializationStates(mergedFlow); @@ -65,7 +80,9 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl public void generateOptimizedBoolean(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel) { this.thenTarget = new BranchLabel(codeStream); this.elseTarget = new BranchLabel(codeStream); - this.primaryPattern.generateOptimizedBoolean(currentScope, codeStream, this.thenTarget, this.elseTarget); + for (Pattern pattern : this.patterns ) { + pattern.generateOptimizedBoolean(currentScope, codeStream, this.thenTarget, this.elseTarget); + } Constant cst = this.condition.optimizedBooleanConstant(); setGuardedElseTarget(currentScope, this.elseTarget); @@ -104,25 +121,42 @@ public boolean isAlwaysTrue() { } @Override public boolean coversType(TypeBinding type) { - return this.primaryPattern.coversType(type) && isAlwaysTrue(); + if (!isAlwaysTrue()) { + return false; + } + for (Pattern pattern : this.patterns) { + if (pattern.coversType(type)) { + return true; + } + } + return false; } @Override public boolean dominates(Pattern p) { - if (isAlwaysTrue()) - return this.primaryPattern.dominates(p); + if (isAlwaysTrue()) { + for (Pattern pattern : this. patterns) { + if (pattern.dominates(p)) { + return true; + } + } + } return false; } @Override public TypeBinding resolveType(BlockScope scope) { - if (this.resolvedType != null || this.primaryPattern == null) + if (this.resolvedType != null || this.patterns[0] == null) return this.resolvedType; - this.resolvedType = this.primaryPattern.resolveType(scope); + this.resolvedType = this.patterns[0].resolveType(scope); // The following call (as opposed to resolveType() ensures that // the implicitConversion code is set properly and thus the correct // unboxing calls are generated. - this.condition.resolveTypeExpectingWithBindings(this.primaryPattern.bindingsWhenTrue(), scope, TypeBinding.BOOLEAN); + LocalVariableBinding[] patternsBindings = new LocalVariableBinding[] {}; + for (Pattern pattern: this.patterns) { + patternsBindings = LocalVariableBinding.merge(patternsBindings, pattern.bindingsWhenTrue()); + } + this.condition.resolveTypeExpectingWithBindings(patternsBindings, scope, TypeBinding.BOOLEAN); Constant cst = this.condition.optimizedBooleanConstant(); if (cst.typeID() == TypeIds.T_boolean && cst.booleanValue() == false) { scope.problemReporter().falseLiteralInGuard(this.condition); @@ -148,20 +182,27 @@ public boolean visit( return false; } }, scope); - return this.resolvedType = this.primaryPattern.resolvedType; + return this.resolvedType = this.patterns[0].resolvedType; } @Override public StringBuilder printExpression(int indent, StringBuilder output) { - this.primaryPattern.print(indent, output).append(" when "); //$NON-NLS-1$ + for (int i = 0; i < this.patterns.length; i++) { + this.patterns[i].print(indent, output); + if (i < this.patterns.length - 1) { + output.append(", "); //$NON-NLS-1$ + } + } + output.append(" when "); //$NON-NLS-1$ return this.condition.print(indent, output); } @Override public void traverse(ASTVisitor visitor, BlockScope scope) { if (visitor.visit(this, scope)) { - if (this.primaryPattern != null) - this.primaryPattern.traverse(visitor, scope); + for (Pattern pattern : this.patterns) { + pattern.traverse(visitor, scope); + } if (this.condition != null) this.condition.traverse(visitor, scope); } @@ -170,28 +211,34 @@ public void traverse(ASTVisitor visitor, BlockScope scope) { @Override public void suspendVariables(CodeStream codeStream, BlockScope scope) { codeStream.removeNotDefinitelyAssignedVariables(scope, this.thenInitStateIndex1); - this.primaryPattern.suspendVariables(codeStream, scope); + if (this.patterns[0] != null) { + this.patterns[0].suspendVariables(codeStream, scope); + } } @Override public void resumeVariables(CodeStream codeStream, BlockScope scope) { codeStream.addDefinitelyAssignedVariables(scope, this.thenInitStateIndex2); - this.primaryPattern.resumeVariables(codeStream, scope); + if (this.patterns[0] != null) { + this.patterns[0].resumeVariables(codeStream, scope); + } } @Override protected boolean isPatternTypeCompatible(TypeBinding other, BlockScope scope) { - return this.primaryPattern.isPatternTypeCompatible(other, scope); + return this.patterns[0].isPatternTypeCompatible(other, scope); } @Override public void wrapupGeneration(CodeStream codeStream) { - this.primaryPattern.wrapupGeneration(codeStream); + this.patterns[0].wrapupGeneration(codeStream); } @Override public void fullWrapupGeneration(CodeStream codeStream) { - this.primaryPattern.fullWrapupGeneration(codeStream); + for (Pattern pattern : this.patterns) { + pattern.fullWrapupGeneration(codeStream); + } } @Override protected void generatePatternVariable(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel) { - this.primaryPattern.generatePatternVariable(currentScope, codeStream, trueLabel, falseLabel); + this.patterns[0].generatePatternVariable(currentScope, codeStream, trueLabel, falseLabel); } } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Parser.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Parser.java index 98013026c74..bbc1b308901 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Parser.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Parser.java @@ -7476,1018 +7476,1015 @@ protected void consumeRule(int act) { case 479 : if (DEBUG) { System.out.println("SwitchLabelCaseLhs ::= case CaseLabelElements"); } //$NON-NLS-1$ consumeSwitchLabelCaseLhs(); break; - case 481 : if (DEBUG) { System.out.println("CaseLabelElements ::= CaseLabelElements COMMA..."); } //$NON-NLS-1$ + case 483 : if (DEBUG) { System.out.println("CaseLabelConstantElements ::= CaseLabelConstantElements"); } //$NON-NLS-1$ consumeCaseLabelElements(); break; - case 482 : if (DEBUG) { System.out.println("CaseLabelElement ::= ConstantExpression"); } //$NON-NLS-1$ + case 484 : if (DEBUG) { System.out.println("CaseLabelConstantElement ::= ConstantExpression"); } //$NON-NLS-1$ consumeCaseLabelElement(CaseLabelKind.CASE_EXPRESSION); break; - case 483 : if (DEBUG) { System.out.println("CaseLabelElement ::= default"); } //$NON-NLS-1$ + case 485 : if (DEBUG) { System.out.println("CaseLabelConstantElement ::= default"); } //$NON-NLS-1$ consumeCaseLabelElement(CaseLabelKind.CASE_DEFAULT); break; - case 484 : if (DEBUG) { System.out.println("CaseLabelElement ::= CaseLabelElementPattern"); } //$NON-NLS-1$ - consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); break; + case 490 : if (DEBUG) { System.out.println("CasePatternList ::= CasePatternList COMMA CasePattern"); } //$NON-NLS-1$ + consumeCaseLabelElements(); break; - case 485 : if (DEBUG) { System.out.println("CaseLabelElement ::= CaseLabelElementPattern Guard"); } //$NON-NLS-1$ + case 491 : if (DEBUG) { System.out.println("CasePattern ::= Pattern"); } //$NON-NLS-1$ consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); break; - case 486 : if (DEBUG) { System.out.println("CaseLabelElementPattern ::= BeginCaseElement Pattern"); } //$NON-NLS-1$ - consumeCaseLabelElementPattern(); break; - - case 487 : if (DEBUG) { System.out.println("Guard ::= RestrictedIdentifierWhen Expression"); } //$NON-NLS-1$ + case 492 : if (DEBUG) { System.out.println("Guard ::= RestrictedIdentifierWhen Expression"); } //$NON-NLS-1$ consumeGuard(); break; - case 488 : if (DEBUG) { System.out.println("YieldStatement ::= RestrictedIdentifierYield Expression"); } //$NON-NLS-1$ + case 493 : if (DEBUG) { System.out.println("YieldStatement ::= RestrictedIdentifierYield Expression"); } //$NON-NLS-1$ consumeStatementYield() ; break; - case 489 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); } //$NON-NLS-1$ + case 494 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); } //$NON-NLS-1$ consumeStatementWhile() ; break; - case 490 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); } //$NON-NLS-1$ + case 495 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); } //$NON-NLS-1$ consumeStatementWhile() ; break; - case 491 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); } //$NON-NLS-1$ + case 496 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); } //$NON-NLS-1$ consumeStatementDo() ; break; - case 492 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); } //$NON-NLS-1$ + case 497 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); } //$NON-NLS-1$ consumeStatementFor() ; break; - case 493 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); } //$NON-NLS-1$ + case 498 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); } //$NON-NLS-1$ consumeStatementFor() ; break; - case 494 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); } //$NON-NLS-1$ + case 499 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); } //$NON-NLS-1$ consumeForInit() ; break; - case 498 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); } //$NON-NLS-1$ + case 503 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); } //$NON-NLS-1$ consumeStatementExpressionList() ; break; - case 499 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); } //$NON-NLS-1$ + case 504 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); } //$NON-NLS-1$ consumeSimpleAssertStatement() ; break; - case 500 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); } //$NON-NLS-1$ + case 505 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); } //$NON-NLS-1$ consumeAssertStatement() ; break; - case 501 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); } //$NON-NLS-1$ + case 506 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); } //$NON-NLS-1$ consumeStatementBreak() ; break; - case 502 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); } //$NON-NLS-1$ + case 507 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); } //$NON-NLS-1$ consumeStatementBreakWithLabel() ; break; - case 503 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); } //$NON-NLS-1$ + case 508 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); } //$NON-NLS-1$ consumeStatementContinue() ; break; - case 504 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); } //$NON-NLS-1$ + case 509 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); } //$NON-NLS-1$ consumeStatementContinueWithLabel() ; break; - case 505 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); } //$NON-NLS-1$ + case 510 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); } //$NON-NLS-1$ consumeStatementReturn() ; break; - case 506 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); } //$NON-NLS-1$ + case 511 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); } //$NON-NLS-1$ consumeStatementThrow(); break; - case 507 : if (DEBUG) { System.out.println("ThrowExpression ::= throw Expression"); } //$NON-NLS-1$ + case 512 : if (DEBUG) { System.out.println("ThrowExpression ::= throw Expression"); } //$NON-NLS-1$ consumeThrowExpression() ; break; - case 508 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); } //$NON-NLS-1$ + case 513 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); } //$NON-NLS-1$ consumeStatementSynchronized(); break; - case 509 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); } //$NON-NLS-1$ + case 514 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); } //$NON-NLS-1$ consumeOnlySynchronized(); break; - case 510 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); } //$NON-NLS-1$ + case 515 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); } //$NON-NLS-1$ consumeStatementTry(false, false); break; - case 511 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); } //$NON-NLS-1$ + case 516 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); } //$NON-NLS-1$ consumeStatementTry(true, false); break; - case 512 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ + case 517 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ consumeStatementTry(false, true); break; - case 513 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ + case 518 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ consumeStatementTry(true, true); break; - case 514 : if (DEBUG) { System.out.println("ResourceSpecification ::= LPAREN Resources ;opt RPAREN"); } //$NON-NLS-1$ + case 519 : if (DEBUG) { System.out.println("ResourceSpecification ::= LPAREN Resources ;opt RPAREN"); } //$NON-NLS-1$ consumeResourceSpecification(); break; - case 515 : if (DEBUG) { System.out.println(";opt ::="); } //$NON-NLS-1$ + case 520 : if (DEBUG) { System.out.println(";opt ::="); } //$NON-NLS-1$ consumeResourceOptionalTrailingSemiColon(false); break; - case 516 : if (DEBUG) { System.out.println(";opt ::= SEMICOLON"); } //$NON-NLS-1$ + case 521 : if (DEBUG) { System.out.println(";opt ::= SEMICOLON"); } //$NON-NLS-1$ consumeResourceOptionalTrailingSemiColon(true); break; - case 517 : if (DEBUG) { System.out.println("Resources ::= Resource"); } //$NON-NLS-1$ + case 522 : if (DEBUG) { System.out.println("Resources ::= Resource"); } //$NON-NLS-1$ consumeSingleResource(); break; - case 518 : if (DEBUG) { System.out.println("Resources ::= Resources TrailingSemiColon Resource"); } //$NON-NLS-1$ + case 523 : if (DEBUG) { System.out.println("Resources ::= Resources TrailingSemiColon Resource"); } //$NON-NLS-1$ consumeMultipleResources(); break; - case 519 : if (DEBUG) { System.out.println("TrailingSemiColon ::= SEMICOLON"); } //$NON-NLS-1$ + case 524 : if (DEBUG) { System.out.println("TrailingSemiColon ::= SEMICOLON"); } //$NON-NLS-1$ consumeResourceOptionalTrailingSemiColon(true); break; - case 520 : if (DEBUG) { System.out.println("Resource ::= Type PushModifiers VariableDeclaratorId..."); } //$NON-NLS-1$ + case 525 : if (DEBUG) { System.out.println("Resource ::= Type PushModifiers VariableDeclaratorId..."); } //$NON-NLS-1$ consumeResourceAsLocalVariableDeclaration(); break; - case 521 : if (DEBUG) { System.out.println("Resource ::= Modifiers Type PushRealModifiers..."); } //$NON-NLS-1$ + case 526 : if (DEBUG) { System.out.println("Resource ::= Modifiers Type PushRealModifiers..."); } //$NON-NLS-1$ consumeResourceAsLocalVariableDeclaration(); break; - case 522 : if (DEBUG) { System.out.println("Resource ::= Name"); } //$NON-NLS-1$ + case 527 : if (DEBUG) { System.out.println("Resource ::= Name"); } //$NON-NLS-1$ consumeResourceAsLocalVariable(); break; - case 523 : if (DEBUG) { System.out.println("Resource ::= this"); } //$NON-NLS-1$ + case 528 : if (DEBUG) { System.out.println("Resource ::= this"); } //$NON-NLS-1$ consumeResourceAsThis(); break; - case 524 : if (DEBUG) { System.out.println("Resource ::= FieldAccess"); } //$NON-NLS-1$ + case 529 : if (DEBUG) { System.out.println("Resource ::= FieldAccess"); } //$NON-NLS-1$ consumeResourceAsFieldAccess(); break; - case 526 : if (DEBUG) { System.out.println("ExitTryBlock ::="); } //$NON-NLS-1$ + case 531 : if (DEBUG) { System.out.println("ExitTryBlock ::="); } //$NON-NLS-1$ consumeExitTryBlock(); break; - case 528 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); } //$NON-NLS-1$ + case 533 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); } //$NON-NLS-1$ consumeCatches(); break; - case 529 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); } //$NON-NLS-1$ + case 534 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); } //$NON-NLS-1$ consumeStatementCatch() ; break; - case 531 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); } //$NON-NLS-1$ + case 536 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); } //$NON-NLS-1$ consumeLeftParen(); break; - case 532 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); } //$NON-NLS-1$ + case 537 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); } //$NON-NLS-1$ consumeRightParen(); break; - case 537 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); } //$NON-NLS-1$ + case 542 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); } //$NON-NLS-1$ consumePrimaryNoNewArrayThis(); break; - case 538 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); } //$NON-NLS-1$ + case 543 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); } //$NON-NLS-1$ consumePrimaryNoNewArray(); break; - case 539 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); } //$NON-NLS-1$ + case 544 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); } //$NON-NLS-1$ consumePrimaryNoNewArrayWithName(); break; - case 542 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); } //$NON-NLS-1$ + case 547 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); } //$NON-NLS-1$ consumePrimaryNoNewArrayNameThis(); break; - case 543 : if (DEBUG) { System.out.println("QualifiedSuperReceiver ::= Name DOT super"); } //$NON-NLS-1$ + case 548 : if (DEBUG) { System.out.println("QualifiedSuperReceiver ::= Name DOT super"); } //$NON-NLS-1$ consumeQualifiedSuperReceiver(); break; - case 544 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); } //$NON-NLS-1$ + case 549 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); } //$NON-NLS-1$ consumePrimaryNoNewArrayName(); break; - case 545 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); } //$NON-NLS-1$ + case 550 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); } //$NON-NLS-1$ consumePrimaryNoNewArrayArrayType(); break; - case 546 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); } //$NON-NLS-1$ + case 551 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); } //$NON-NLS-1$ consumePrimaryNoNewArrayPrimitiveArrayType(); break; - case 547 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); } //$NON-NLS-1$ + case 552 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); } //$NON-NLS-1$ consumePrimaryNoNewArrayPrimitiveType(); break; - case 553 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ + case 558 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ consumeReferenceExpressionTypeArgumentsAndTrunk(false); break; - case 554 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ + case 559 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ consumeReferenceExpressionTypeArgumentsAndTrunk(true); break; - case 555 : if (DEBUG) { System.out.println("ReferenceExpression ::= PrimitiveType Dims COLON_COLON"); } //$NON-NLS-1$ + case 560 : if (DEBUG) { System.out.println("ReferenceExpression ::= PrimitiveType Dims COLON_COLON"); } //$NON-NLS-1$ consumeReferenceExpressionTypeForm(true); break; - case 556 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name Dimsopt COLON_COLON..."); } //$NON-NLS-1$ + case 561 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name Dimsopt COLON_COLON..."); } //$NON-NLS-1$ consumeReferenceExpressionTypeForm(false); break; - case 557 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name BeginTypeArguments..."); } //$NON-NLS-1$ + case 562 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name BeginTypeArguments..."); } //$NON-NLS-1$ consumeReferenceExpressionGenericTypeForm(); break; - case 558 : if (DEBUG) { System.out.println("ReferenceExpression ::= Primary COLON_COLON..."); } //$NON-NLS-1$ + case 563 : if (DEBUG) { System.out.println("ReferenceExpression ::= Primary COLON_COLON..."); } //$NON-NLS-1$ consumeReferenceExpressionPrimaryForm(); break; - case 559 : if (DEBUG) { System.out.println("ReferenceExpression ::= QualifiedSuperReceiver..."); } //$NON-NLS-1$ + case 564 : if (DEBUG) { System.out.println("ReferenceExpression ::= QualifiedSuperReceiver..."); } //$NON-NLS-1$ consumeReferenceExpressionPrimaryForm(); break; - case 560 : if (DEBUG) { System.out.println("ReferenceExpression ::= super COLON_COLON..."); } //$NON-NLS-1$ + case 565 : if (DEBUG) { System.out.println("ReferenceExpression ::= super COLON_COLON..."); } //$NON-NLS-1$ consumeReferenceExpressionSuperForm(); break; - case 561 : if (DEBUG) { System.out.println("NonWildTypeArgumentsopt ::="); } //$NON-NLS-1$ + case 566 : if (DEBUG) { System.out.println("NonWildTypeArgumentsopt ::="); } //$NON-NLS-1$ consumeEmptyTypeArguments(); break; - case 563 : if (DEBUG) { System.out.println("IdentifierOrNew ::= Identifier"); } //$NON-NLS-1$ + case 568 : if (DEBUG) { System.out.println("IdentifierOrNew ::= Identifier"); } //$NON-NLS-1$ consumeIdentifierOrNew(false); break; - case 564 : if (DEBUG) { System.out.println("IdentifierOrNew ::= new"); } //$NON-NLS-1$ + case 569 : if (DEBUG) { System.out.println("IdentifierOrNew ::= new"); } //$NON-NLS-1$ consumeIdentifierOrNew(true); break; - case 565 : if (DEBUG) { System.out.println("LambdaExpression ::= LambdaParameters ARROW LambdaBody"); } //$NON-NLS-1$ + case 570 : if (DEBUG) { System.out.println("LambdaExpression ::= LambdaParameters ARROW LambdaBody"); } //$NON-NLS-1$ consumeLambdaExpression(); break; - case 566 : if (DEBUG) { System.out.println("NestedLambda ::="); } //$NON-NLS-1$ + case 571 : if (DEBUG) { System.out.println("NestedLambda ::="); } //$NON-NLS-1$ consumeNestedLambda(); break; - case 567 : if (DEBUG) { System.out.println("LambdaParameters ::= UNDERSCORE NestedLambda"); } //$NON-NLS-1$ + case 572 : if (DEBUG) { System.out.println("LambdaParameters ::= UNDERSCORE NestedLambda"); } //$NON-NLS-1$ consumeTypeElidedLambdaParameter(false); break; - case 568 : if (DEBUG) { System.out.println("LambdaParameters ::= Identifier NestedLambda"); } //$NON-NLS-1$ + case 573 : if (DEBUG) { System.out.println("LambdaParameters ::= Identifier NestedLambda"); } //$NON-NLS-1$ consumeTypeElidedLambdaParameter(false); break; - case 574 : if (DEBUG) { System.out.println("TypeElidedFormalParameterList ::=..."); } //$NON-NLS-1$ + case 579 : if (DEBUG) { System.out.println("TypeElidedFormalParameterList ::=..."); } //$NON-NLS-1$ consumeFormalParameterList(); break; - case 575 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= Modifiersopt Identifier"); } //$NON-NLS-1$ + case 580 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= Modifiersopt Identifier"); } //$NON-NLS-1$ consumeTypeElidedLambdaParameter(true); break; - case 576 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= UNDERSCORE"); } //$NON-NLS-1$ + case 581 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= UNDERSCORE"); } //$NON-NLS-1$ consumeBracketedTypeElidedUnderscoreLambdaParameter(); break; - case 579 : if (DEBUG) { System.out.println("ElidedLeftBraceAndReturn ::="); } //$NON-NLS-1$ + case 584 : if (DEBUG) { System.out.println("ElidedLeftBraceAndReturn ::="); } //$NON-NLS-1$ consumeElidedLeftBraceAndReturn(); break; - case 580 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); } //$NON-NLS-1$ + case 585 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); } //$NON-NLS-1$ consumeAllocationHeader(); break; - case 581 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); } //$NON-NLS-1$ + case 586 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); } //$NON-NLS-1$ consumeClassInstanceCreationExpressionWithTypeArguments(); break; - case 582 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType..."); } //$NON-NLS-1$ + case 587 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType..."); } //$NON-NLS-1$ consumeClassInstanceCreationExpression(); break; - case 583 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ + case 588 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; break; - case 584 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ + case 589 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ consumeClassInstanceCreationExpressionQualified() ; break; - case 585 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ + case 590 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ consumeClassInstanceCreationExpressionQualified() ; break; - case 586 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ + case 591 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; break; - case 587 : if (DEBUG) { System.out.println("EnterInstanceCreationArgumentList ::="); } //$NON-NLS-1$ + case 592 : if (DEBUG) { System.out.println("EnterInstanceCreationArgumentList ::="); } //$NON-NLS-1$ consumeEnterInstanceCreationArgumentList(); break; - case 588 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT new"); } //$NON-NLS-1$ + case 593 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT new"); } //$NON-NLS-1$ consumeClassInstanceCreationExpressionName() ; break; - case 589 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); } //$NON-NLS-1$ + case 594 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); } //$NON-NLS-1$ consumeClassBodyopt(); break; - case 591 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ + case 596 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ consumeEnterAnonymousClassBody(false); break; - case 592 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); } //$NON-NLS-1$ + case 597 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); } //$NON-NLS-1$ consumeClassBodyopt(); break; - case 594 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ + case 599 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ consumeEnterAnonymousClassBody(true); break; - case 596 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); } //$NON-NLS-1$ + case 601 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); } //$NON-NLS-1$ consumeArgumentList(); break; - case 597 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); } //$NON-NLS-1$ + case 602 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); } //$NON-NLS-1$ consumeArrayCreationHeader(); break; - case 598 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); } //$NON-NLS-1$ + case 603 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); } //$NON-NLS-1$ consumeArrayCreationHeader(); break; - case 599 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ + case 604 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ consumeArrayCreationExpressionWithoutInitializer(); break; - case 600 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); } //$NON-NLS-1$ + case 605 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); } //$NON-NLS-1$ consumeArrayCreationExpressionWithInitializer(); break; - case 601 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ + case 606 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ consumeArrayCreationExpressionWithoutInitializer(); break; - case 602 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); } //$NON-NLS-1$ + case 607 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); } //$NON-NLS-1$ consumeArrayCreationExpressionWithInitializer(); break; - case 604 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); } //$NON-NLS-1$ + case 609 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); } //$NON-NLS-1$ consumeDimWithOrWithOutExprs(); break; - case 606 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= TypeAnnotationsopt LBRACKET..."); } //$NON-NLS-1$ + case 611 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= TypeAnnotationsopt LBRACKET..."); } //$NON-NLS-1$ consumeDimWithOrWithOutExpr(); break; - case 607 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); } //$NON-NLS-1$ + case 612 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); } //$NON-NLS-1$ consumeDims(); break; - case 610 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); } //$NON-NLS-1$ + case 615 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); } //$NON-NLS-1$ consumeOneDimLoop(false); break; - case 611 : if (DEBUG) { System.out.println("OneDimLoop ::= TypeAnnotations LBRACKET RBRACKET"); } //$NON-NLS-1$ + case 616 : if (DEBUG) { System.out.println("OneDimLoop ::= TypeAnnotations LBRACKET RBRACKET"); } //$NON-NLS-1$ consumeOneDimLoop(true); break; - case 612 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); } //$NON-NLS-1$ + case 617 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); } //$NON-NLS-1$ consumeFieldAccess(false); break; - case 613 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); } //$NON-NLS-1$ + case 618 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); } //$NON-NLS-1$ consumeFieldAccess(true); break; - case 614 : if (DEBUG) { System.out.println("FieldAccess ::= QualifiedSuperReceiver DOT Identifier"); } //$NON-NLS-1$ + case 619 : if (DEBUG) { System.out.println("FieldAccess ::= QualifiedSuperReceiver DOT Identifier"); } //$NON-NLS-1$ consumeFieldAccess(false); break; - case 615 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ + case 620 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ consumeMethodInvocationName(); break; - case 616 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); } //$NON-NLS-1$ + case 621 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); } //$NON-NLS-1$ consumeMethodInvocationNameWithTypeArguments(); break; - case 617 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); } //$NON-NLS-1$ + case 622 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); } //$NON-NLS-1$ consumeMethodInvocationPrimaryWithTypeArguments(); break; - case 618 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); } //$NON-NLS-1$ + case 623 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); } //$NON-NLS-1$ consumeMethodInvocationPrimary(); break; - case 619 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ + case 624 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ consumeMethodInvocationPrimary(); break; - case 620 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ + case 625 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ consumeMethodInvocationPrimaryWithTypeArguments(); break; - case 621 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); } //$NON-NLS-1$ + case 626 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); } //$NON-NLS-1$ consumeMethodInvocationSuperWithTypeArguments(); break; - case 622 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); } //$NON-NLS-1$ + case 627 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); } //$NON-NLS-1$ consumeMethodInvocationSuper(); break; - case 623 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); } //$NON-NLS-1$ + case 628 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); } //$NON-NLS-1$ consumeArrayAccess(true); break; - case 624 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); } //$NON-NLS-1$ + case 629 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); } //$NON-NLS-1$ consumeArrayAccess(false); break; - case 625 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); } //$NON-NLS-1$ + case 630 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); } //$NON-NLS-1$ consumeArrayAccess(false); break; - case 627 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); } //$NON-NLS-1$ + case 632 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); } //$NON-NLS-1$ consumePostfixExpression(); break; - case 630 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); } //$NON-NLS-1$ + case 635 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.PLUS,true); break; - case 631 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); } //$NON-NLS-1$ + case 636 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.MINUS,true); break; - case 632 : if (DEBUG) { System.out.println("PushPosition ::="); } //$NON-NLS-1$ + case 637 : if (DEBUG) { System.out.println("PushPosition ::="); } //$NON-NLS-1$ consumePushPosition(); break; - case 635 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); } //$NON-NLS-1$ + case 640 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.PLUS); break; - case 636 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); } //$NON-NLS-1$ + case 641 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.MINUS); break; - case 638 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); } //$NON-NLS-1$ + case 643 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.PLUS,false); break; - case 639 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); } //$NON-NLS-1$ + case 644 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.MINUS,false); break; - case 641 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); } //$NON-NLS-1$ + case 646 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.TWIDDLE); break; - case 642 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); } //$NON-NLS-1$ + case 647 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.NOT); break; - case 644 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); } //$NON-NLS-1$ + case 649 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); } //$NON-NLS-1$ consumeCastExpressionWithPrimitiveType(); break; - case 645 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ + case 650 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ consumeCastExpressionWithGenericsArray(); break; - case 646 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ + case 651 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ consumeCastExpressionWithQualifiedGenericsArray(); break; - case 647 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); } //$NON-NLS-1$ + case 652 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); } //$NON-NLS-1$ consumeCastExpressionLL1(); break; - case 648 : if (DEBUG) { System.out.println("CastExpression ::= BeginIntersectionCast PushLPAREN..."); } //$NON-NLS-1$ + case 653 : if (DEBUG) { System.out.println("CastExpression ::= BeginIntersectionCast PushLPAREN..."); } //$NON-NLS-1$ consumeCastExpressionLL1WithBounds(); break; - case 649 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims..."); } //$NON-NLS-1$ + case 654 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims..."); } //$NON-NLS-1$ consumeCastExpressionWithNameArray(); break; - case 650 : if (DEBUG) { System.out.println("AdditionalBoundsListOpt ::="); } //$NON-NLS-1$ + case 655 : if (DEBUG) { System.out.println("AdditionalBoundsListOpt ::="); } //$NON-NLS-1$ consumeZeroAdditionalBounds(); break; - case 654 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); } //$NON-NLS-1$ + case 659 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); } //$NON-NLS-1$ consumeOnlyTypeArgumentsForCastExpression(); break; - case 655 : if (DEBUG) { System.out.println("InsideCastExpression ::="); } //$NON-NLS-1$ + case 660 : if (DEBUG) { System.out.println("InsideCastExpression ::="); } //$NON-NLS-1$ consumeInsideCastExpression(); break; - case 656 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); } //$NON-NLS-1$ + case 661 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); } //$NON-NLS-1$ consumeInsideCastExpressionLL1(); break; - case 657 : if (DEBUG) { System.out.println("InsideCastExpressionLL1WithBounds ::="); } //$NON-NLS-1$ + case 662 : if (DEBUG) { System.out.println("InsideCastExpressionLL1WithBounds ::="); } //$NON-NLS-1$ consumeInsideCastExpressionLL1WithBounds (); break; - case 658 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); } //$NON-NLS-1$ + case 663 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); } //$NON-NLS-1$ consumeInsideCastExpressionWithQualifiedGenerics(); break; - case 660 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ + case 665 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.MULTIPLY); break; - case 661 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ + case 666 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.DIVIDE); break; - case 662 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ + case 667 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.REMAINDER); break; - case 664 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); } //$NON-NLS-1$ + case 669 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.PLUS); break; - case 665 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); } //$NON-NLS-1$ + case 670 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.MINUS); break; - case 667 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); } //$NON-NLS-1$ + case 672 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.LEFT_SHIFT); break; - case 668 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); } //$NON-NLS-1$ + case 673 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); break; - case 669 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ + case 674 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); break; - case 671 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); } //$NON-NLS-1$ + case 676 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.LESS); break; - case 672 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); } //$NON-NLS-1$ + case 677 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.GREATER); break; - case 673 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); } //$NON-NLS-1$ + case 678 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.LESS_EQUAL); break; - case 674 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); } //$NON-NLS-1$ + case 679 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.GREATER_EQUAL); break; - case 676 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); } //$NON-NLS-1$ + case 681 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); } //$NON-NLS-1$ consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); break; - case 677 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); } //$NON-NLS-1$ + case 682 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); } //$NON-NLS-1$ consumeEqualityExpression(OperatorIds.NOT_EQUAL); break; - case 679 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); } //$NON-NLS-1$ + case 684 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.AND); break; - case 681 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); } //$NON-NLS-1$ + case 686 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.XOR); break; - case 683 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); } //$NON-NLS-1$ + case 688 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.OR); break; - case 685 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); } //$NON-NLS-1$ + case 690 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.AND_AND); break; - case 687 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ + case 692 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.OR_OR); break; - case 689 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ + case 694 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; break; - case 692 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); } //$NON-NLS-1$ + case 697 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); } //$NON-NLS-1$ consumeAssignment(); break; - case 694 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); } //$NON-NLS-1$ + case 699 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); } //$NON-NLS-1$ ignoreExpressionAssignment(); break; - case 695 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); } //$NON-NLS-1$ + case 700 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(EQUAL); break; - case 696 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); } //$NON-NLS-1$ + case 701 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(MULTIPLY); break; - case 697 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); } //$NON-NLS-1$ + case 702 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(DIVIDE); break; - case 698 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); } //$NON-NLS-1$ + case 703 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(REMAINDER); break; - case 699 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); } //$NON-NLS-1$ + case 704 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(PLUS); break; - case 700 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); } //$NON-NLS-1$ + case 705 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(MINUS); break; - case 701 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); } //$NON-NLS-1$ + case 706 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(LEFT_SHIFT); break; - case 702 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ + case 707 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(RIGHT_SHIFT); break; - case 703 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ + case 708 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT); break; - case 704 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); } //$NON-NLS-1$ + case 709 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(AND); break; - case 705 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); } //$NON-NLS-1$ + case 710 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(XOR); break; - case 706 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); } //$NON-NLS-1$ + case 711 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); } //$NON-NLS-1$ consumeAssignmentOperator(OR); break; - case 707 : if (DEBUG) { System.out.println("Expression ::= AssignmentExpression"); } //$NON-NLS-1$ + case 712 : if (DEBUG) { System.out.println("Expression ::= AssignmentExpression"); } //$NON-NLS-1$ consumeExpression(); break; - case 710 : if (DEBUG) { System.out.println("Expressionopt ::="); } //$NON-NLS-1$ + case 715 : if (DEBUG) { System.out.println("Expressionopt ::="); } //$NON-NLS-1$ consumeEmptyExpression(); break; - case 715 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); } //$NON-NLS-1$ + case 720 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); } //$NON-NLS-1$ consumeEmptyClassBodyDeclarationsopt(); break; - case 716 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ + case 721 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ consumeClassBodyDeclarationsopt(); break; - case 717 : if (DEBUG) { System.out.println("Modifiersopt ::="); } //$NON-NLS-1$ + case 722 : if (DEBUG) { System.out.println("Modifiersopt ::="); } //$NON-NLS-1$ consumeDefaultModifiers(); break; - case 718 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); } //$NON-NLS-1$ + case 723 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); } //$NON-NLS-1$ consumeModifiers(); break; - case 719 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); } //$NON-NLS-1$ + case 724 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); } //$NON-NLS-1$ consumeEmptyBlockStatementsopt(); break; - case 721 : if (DEBUG) { System.out.println("Dimsopt ::="); } //$NON-NLS-1$ + case 726 : if (DEBUG) { System.out.println("Dimsopt ::="); } //$NON-NLS-1$ consumeEmptyDimsopt(); break; - case 723 : if (DEBUG) { System.out.println("ArgumentListopt ::="); } //$NON-NLS-1$ + case 728 : if (DEBUG) { System.out.println("ArgumentListopt ::="); } //$NON-NLS-1$ consumeEmptyArgumentListopt(); break; - case 727 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); } //$NON-NLS-1$ + case 732 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); } //$NON-NLS-1$ consumeFormalParameterListopt(); break; - case 734 : if (DEBUG) { System.out.println("ClassHeaderPermittedSubclasses ::=..."); } //$NON-NLS-1$ + case 739 : if (DEBUG) { System.out.println("ClassHeaderPermittedSubclasses ::=..."); } //$NON-NLS-1$ consumeClassHeaderPermittedSubclasses(); break; - case 737 : if (DEBUG) { System.out.println("InterfaceHeaderPermittedSubClassesAndSubInterfaces ::="); } //$NON-NLS-1$ + case 742 : if (DEBUG) { System.out.println("InterfaceHeaderPermittedSubClassesAndSubInterfaces ::="); } //$NON-NLS-1$ consumeInterfaceHeaderPermittedSubClassesAndSubInterfaces(); break; - case 738 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); } //$NON-NLS-1$ + case 743 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); } //$NON-NLS-1$ consumeEmptyInterfaceMemberDeclarationsopt(); break; - case 739 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ + case 744 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ consumeInterfaceMemberDeclarationsopt(); break; - case 740 : if (DEBUG) { System.out.println("NestedType ::="); } //$NON-NLS-1$ + case 745 : if (DEBUG) { System.out.println("NestedType ::="); } //$NON-NLS-1$ consumeNestedType(); break; - case 741 : if (DEBUG) { System.out.println("ForInitopt ::="); } //$NON-NLS-1$ + case 746 : if (DEBUG) { System.out.println("ForInitopt ::="); } //$NON-NLS-1$ consumeEmptyForInitopt(); break; - case 743 : if (DEBUG) { System.out.println("ForUpdateopt ::="); } //$NON-NLS-1$ + case 748 : if (DEBUG) { System.out.println("ForUpdateopt ::="); } //$NON-NLS-1$ consumeEmptyForUpdateopt(); break; - case 747 : if (DEBUG) { System.out.println("Catchesopt ::="); } //$NON-NLS-1$ + case 752 : if (DEBUG) { System.out.println("Catchesopt ::="); } //$NON-NLS-1$ consumeEmptyCatchesopt(); break; - case 749 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); } //$NON-NLS-1$ + case 754 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); } //$NON-NLS-1$ consumeEnumDeclaration(); break; - case 750 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); } //$NON-NLS-1$ + case 755 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); } //$NON-NLS-1$ consumeEnumHeader(); break; - case 751 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); } //$NON-NLS-1$ + case 756 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); } //$NON-NLS-1$ consumeEnumHeaderName(); break; - case 752 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); } //$NON-NLS-1$ + case 757 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); } //$NON-NLS-1$ consumeEnumHeaderNameWithTypeParameters(); break; - case 753 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); } //$NON-NLS-1$ + case 758 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); } //$NON-NLS-1$ consumeEnumBodyNoConstants(); break; - case 754 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); } //$NON-NLS-1$ + case 759 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); } //$NON-NLS-1$ consumeEnumBodyNoConstants(); break; - case 755 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); } //$NON-NLS-1$ + case 760 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); } //$NON-NLS-1$ consumeEnumBodyWithConstants(); break; - case 756 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); } //$NON-NLS-1$ + case 761 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); } //$NON-NLS-1$ consumeEnumBodyWithConstants(); break; - case 758 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); } //$NON-NLS-1$ + case 763 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); } //$NON-NLS-1$ consumeEnumConstants(); break; - case 759 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); } //$NON-NLS-1$ + case 764 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); } //$NON-NLS-1$ consumeEnumConstantHeaderName(); break; - case 760 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); } //$NON-NLS-1$ + case 765 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); } //$NON-NLS-1$ consumeEnumConstantHeader(); break; - case 761 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); } //$NON-NLS-1$ + case 766 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); } //$NON-NLS-1$ consumeEnumConstantWithClassBody(); break; - case 762 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); } //$NON-NLS-1$ + case 767 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); } //$NON-NLS-1$ consumeEnumConstantNoClassBody(); break; - case 763 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ + case 768 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ consumeArguments(); break; - case 764 : if (DEBUG) { System.out.println("Argumentsopt ::="); } //$NON-NLS-1$ + case 769 : if (DEBUG) { System.out.println("Argumentsopt ::="); } //$NON-NLS-1$ consumeEmptyArguments(); break; - case 766 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); } //$NON-NLS-1$ + case 771 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); } //$NON-NLS-1$ consumeEnumDeclarations(); break; - case 767 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); } //$NON-NLS-1$ + case 772 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); } //$NON-NLS-1$ consumeEmptyEnumDeclarations(); break; - case 769 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); } //$NON-NLS-1$ + case 774 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); } //$NON-NLS-1$ consumeEnhancedForStatement(); break; - case 770 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); } //$NON-NLS-1$ + case 775 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); } //$NON-NLS-1$ consumeEnhancedForStatement(); break; - case 771 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); } //$NON-NLS-1$ + case 776 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); } //$NON-NLS-1$ consumeEnhancedForStatementHeaderInit(false); break; - case 772 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); } //$NON-NLS-1$ + case 777 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); } //$NON-NLS-1$ consumeEnhancedForStatementHeaderInit(true); break; - case 773 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); } //$NON-NLS-1$ + case 778 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); } //$NON-NLS-1$ consumeEnhancedForStatementHeader(); break; - case 774 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); } //$NON-NLS-1$ + case 779 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); } //$NON-NLS-1$ consumeImportDeclaration(); break; - case 775 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); } //$NON-NLS-1$ + case 780 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); } //$NON-NLS-1$ consumeSingleStaticImportDeclarationName(); break; - case 776 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); } //$NON-NLS-1$ + case 781 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); } //$NON-NLS-1$ consumeImportDeclaration(); break; - case 777 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); } //$NON-NLS-1$ + case 782 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); } //$NON-NLS-1$ consumeStaticImportOnDemandDeclarationName(); break; - case 778 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ + case 783 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ consumeTypeArguments(); break; - case 779 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ + case 784 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ consumeOnlyTypeArguments(); break; - case 781 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ + case 786 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ consumeTypeArgumentList1(); break; - case 783 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); } //$NON-NLS-1$ + case 788 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); } //$NON-NLS-1$ consumeTypeArgumentList(); break; - case 784 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); } //$NON-NLS-1$ + case 789 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); } //$NON-NLS-1$ consumeTypeArgument(); break; - case 788 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); } //$NON-NLS-1$ + case 793 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); } //$NON-NLS-1$ consumeReferenceType1(); break; - case 789 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ + case 794 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ consumeTypeArgumentReferenceType1(); break; - case 791 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ + case 796 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ consumeTypeArgumentList2(); break; - case 794 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); } //$NON-NLS-1$ + case 799 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); } //$NON-NLS-1$ consumeReferenceType2(); break; - case 795 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ + case 800 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ consumeTypeArgumentReferenceType2(); break; - case 797 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ + case 802 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ consumeTypeArgumentList3(); break; - case 800 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ + case 805 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ consumeReferenceType3(); break; - case 801 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION"); } //$NON-NLS-1$ + case 806 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION"); } //$NON-NLS-1$ consumeWildcard(); break; - case 802 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION WildcardBounds"); } //$NON-NLS-1$ + case 807 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION WildcardBounds"); } //$NON-NLS-1$ consumeWildcardWithBounds(); break; - case 803 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); } //$NON-NLS-1$ + case 808 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); } //$NON-NLS-1$ consumeWildcardBoundsExtends(); break; - case 804 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); } //$NON-NLS-1$ + case 809 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); } //$NON-NLS-1$ consumeWildcardBoundsSuper(); break; - case 805 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION GREATER"); } //$NON-NLS-1$ + case 810 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION GREATER"); } //$NON-NLS-1$ consumeWildcard1(); break; - case 806 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + case 811 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ consumeWildcard1WithBounds(); break; - case 807 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); } //$NON-NLS-1$ + case 812 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); } //$NON-NLS-1$ consumeWildcardBounds1Extends(); break; - case 808 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); } //$NON-NLS-1$ + case 813 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); } //$NON-NLS-1$ consumeWildcardBounds1Super(); break; - case 809 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION RIGHT_SHIFT"); } //$NON-NLS-1$ + case 814 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION RIGHT_SHIFT"); } //$NON-NLS-1$ consumeWildcard2(); break; - case 810 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + case 815 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ consumeWildcard2WithBounds(); break; - case 811 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); } //$NON-NLS-1$ + case 816 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); } //$NON-NLS-1$ consumeWildcardBounds2Extends(); break; - case 812 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); } //$NON-NLS-1$ + case 817 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); } //$NON-NLS-1$ consumeWildcardBounds2Super(); break; - case 813 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + case 818 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ consumeWildcard3(); break; - case 814 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + case 819 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ consumeWildcard3WithBounds(); break; - case 815 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); } //$NON-NLS-1$ + case 820 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); } //$NON-NLS-1$ consumeWildcardBounds3Extends(); break; - case 816 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); } //$NON-NLS-1$ + case 821 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); } //$NON-NLS-1$ consumeWildcardBounds3Super(); break; - case 817 : if (DEBUG) { System.out.println("TypeParameterHeader ::= TypeAnnotationsopt Identifier"); } //$NON-NLS-1$ + case 822 : if (DEBUG) { System.out.println("TypeParameterHeader ::= TypeAnnotationsopt Identifier"); } //$NON-NLS-1$ consumeTypeParameterHeader(); break; - case 818 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); } //$NON-NLS-1$ + case 823 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); } //$NON-NLS-1$ consumeTypeParameters(); break; - case 820 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ + case 825 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ consumeTypeParameterList(); break; - case 822 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + case 827 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ consumeTypeParameterWithExtends(); break; - case 823 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + case 828 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ consumeTypeParameterWithExtendsAndBounds(); break; - case 825 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); } //$NON-NLS-1$ + case 830 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); } //$NON-NLS-1$ consumeAdditionalBoundList(); break; - case 826 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); } //$NON-NLS-1$ + case 831 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); } //$NON-NLS-1$ consumeAdditionalBound(); break; - case 828 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ + case 833 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ consumeTypeParameterList1(); break; - case 829 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); } //$NON-NLS-1$ + case 834 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); } //$NON-NLS-1$ consumeTypeParameter1(); break; - case 830 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + case 835 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ consumeTypeParameter1WithExtends(); break; - case 831 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + case 836 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ consumeTypeParameter1WithExtendsAndBounds(); break; - case 833 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); } //$NON-NLS-1$ + case 838 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); } //$NON-NLS-1$ consumeAdditionalBoundList1(); break; - case 834 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); } //$NON-NLS-1$ + case 839 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); } //$NON-NLS-1$ consumeAdditionalBound1(); break; - case 840 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); } //$NON-NLS-1$ + case 845 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.PLUS); break; - case 841 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); } //$NON-NLS-1$ + case 846 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.MINUS); break; - case 844 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); } //$NON-NLS-1$ + case 849 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.TWIDDLE); break; - case 845 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); } //$NON-NLS-1$ + case 850 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); } //$NON-NLS-1$ consumeUnaryExpression(OperatorIds.NOT); break; - case 848 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ + case 853 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.MULTIPLY); break; - case 849 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); } //$NON-NLS-1$ + case 854 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.MULTIPLY); break; - case 850 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ + case 855 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.DIVIDE); break; - case 851 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); } //$NON-NLS-1$ + case 856 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.DIVIDE); break; - case 852 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ + case 857 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.REMAINDER); break; - case 853 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); } //$NON-NLS-1$ + case 858 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.REMAINDER); break; - case 855 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ + case 860 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.PLUS); break; - case 856 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); } //$NON-NLS-1$ + case 861 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.PLUS); break; - case 857 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ + case 862 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.MINUS); break; - case 858 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); } //$NON-NLS-1$ + case 863 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.MINUS); break; - case 860 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ + case 865 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.LEFT_SHIFT); break; - case 861 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); } //$NON-NLS-1$ + case 866 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.LEFT_SHIFT); break; - case 862 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ + case 867 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); break; - case 863 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); } //$NON-NLS-1$ + case 868 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.RIGHT_SHIFT); break; - case 864 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ + case 869 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); break; - case 865 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); } //$NON-NLS-1$ + case 870 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.UNSIGNED_RIGHT_SHIFT); break; - case 867 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ + case 872 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.LESS); break; - case 868 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); } //$NON-NLS-1$ + case 873 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.LESS); break; - case 869 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ + case 874 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.GREATER); break; - case 870 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); } //$NON-NLS-1$ + case 875 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.GREATER); break; - case 871 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ + case 876 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.LESS_EQUAL); break; - case 872 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); } //$NON-NLS-1$ + case 877 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.LESS_EQUAL); break; - case 873 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ + case 878 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.GREATER_EQUAL); break; - case 874 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); } //$NON-NLS-1$ + case 879 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.GREATER_EQUAL); break; - case 876 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name InstanceofRHS"); } //$NON-NLS-1$ + case 881 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name InstanceofRHS"); } //$NON-NLS-1$ consumeInstanceOfExpressionWithName(); break; - case 877 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); } //$NON-NLS-1$ + case 882 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); } //$NON-NLS-1$ consumeInstanceOfExpression(); break; - case 879 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ + case 884 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); break; - case 880 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); } //$NON-NLS-1$ + case 885 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); } //$NON-NLS-1$ consumeEqualityExpressionWithName(OperatorIds.EQUAL_EQUAL); break; - case 881 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ + case 886 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ consumeEqualityExpression(OperatorIds.NOT_EQUAL); break; - case 882 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); } //$NON-NLS-1$ + case 887 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); } //$NON-NLS-1$ consumeEqualityExpressionWithName(OperatorIds.NOT_EQUAL); break; - case 884 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); } //$NON-NLS-1$ + case 889 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.AND); break; - case 885 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); } //$NON-NLS-1$ + case 890 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.AND); break; - case 887 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ + case 892 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.XOR); break; - case 888 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); } //$NON-NLS-1$ + case 893 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.XOR); break; - case 890 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ + case 895 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.OR); break; - case 891 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); } //$NON-NLS-1$ + case 896 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.OR); break; - case 893 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); } //$NON-NLS-1$ + case 898 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.AND_AND); break; - case 894 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); } //$NON-NLS-1$ + case 899 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.AND_AND); break; - case 896 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); } //$NON-NLS-1$ + case 901 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); } //$NON-NLS-1$ consumeBinaryExpression(OperatorIds.OR_OR); break; - case 897 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); } //$NON-NLS-1$ + case 902 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); } //$NON-NLS-1$ consumeBinaryExpressionWithName(OperatorIds.OR_OR); break; - case 899 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); } //$NON-NLS-1$ + case 904 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); } //$NON-NLS-1$ consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; break; - case 900 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); } //$NON-NLS-1$ + case 905 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); } //$NON-NLS-1$ consumeConditionalExpressionWithName(OperatorIds.QUESTIONCOLON) ; break; - case 904 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ + case 909 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ consumeAnnotationTypeDeclarationHeaderName() ; break; - case 905 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ + case 910 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ; break; - case 906 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ + case 911 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ; break; - case 907 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ + case 912 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ consumeAnnotationTypeDeclarationHeaderName() ; break; - case 908 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); } //$NON-NLS-1$ + case 913 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); } //$NON-NLS-1$ consumeAnnotationTypeDeclarationHeader() ; break; - case 909 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); } //$NON-NLS-1$ + case 914 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); } //$NON-NLS-1$ consumeAnnotationTypeDeclaration() ; break; - case 911 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); } //$NON-NLS-1$ + case 916 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); } //$NON-NLS-1$ consumeEmptyAnnotationTypeMemberDeclarationsopt() ; break; - case 912 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ + case 917 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ consumeAnnotationTypeMemberDeclarationsopt() ; break; - case 914 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); } //$NON-NLS-1$ + case 919 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); } //$NON-NLS-1$ consumeAnnotationTypeMemberDeclarations() ; break; - case 915 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); } //$NON-NLS-1$ + case 920 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); } //$NON-NLS-1$ consumeMethodHeaderNameWithTypeParameters(true); break; - case 916 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ + case 921 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ consumeMethodHeaderName(true); break; - case 917 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); } //$NON-NLS-1$ + case 922 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); } //$NON-NLS-1$ consumeEmptyMethodHeaderDefaultValue() ; break; - case 918 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); } //$NON-NLS-1$ + case 923 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); } //$NON-NLS-1$ consumeMethodHeaderDefaultValue(); break; - case 919 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); } //$NON-NLS-1$ + case 924 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); } //$NON-NLS-1$ consumeMethodHeader(); break; - case 920 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); } //$NON-NLS-1$ + case 925 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); } //$NON-NLS-1$ consumeAnnotationTypeMemberDeclaration() ; break; - case 928 : if (DEBUG) { System.out.println("AnnotationName ::= AT UnannotatableName"); } //$NON-NLS-1$ + case 933 : if (DEBUG) { System.out.println("AnnotationName ::= AT UnannotatableName"); } //$NON-NLS-1$ consumeAnnotationName() ; break; - case 929 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ + case 934 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ consumeNormalAnnotation(false) ; break; - case 930 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); } //$NON-NLS-1$ + case 935 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); } //$NON-NLS-1$ consumeEmptyMemberValuePairsopt() ; break; - case 933 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); } //$NON-NLS-1$ + case 938 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); } //$NON-NLS-1$ consumeMemberValuePairs() ; break; - case 934 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); } //$NON-NLS-1$ + case 939 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); } //$NON-NLS-1$ consumeMemberValuePair() ; break; - case 935 : if (DEBUG) { System.out.println("EnterMemberValue ::="); } //$NON-NLS-1$ + case 940 : if (DEBUG) { System.out.println("EnterMemberValue ::="); } //$NON-NLS-1$ consumeEnterMemberValue() ; break; - case 936 : if (DEBUG) { System.out.println("ExitMemberValue ::="); } //$NON-NLS-1$ + case 941 : if (DEBUG) { System.out.println("ExitMemberValue ::="); } //$NON-NLS-1$ consumeExitMemberValue() ; break; - case 938 : if (DEBUG) { System.out.println("MemberValue ::= Name"); } //$NON-NLS-1$ + case 943 : if (DEBUG) { System.out.println("MemberValue ::= Name"); } //$NON-NLS-1$ consumeMemberValueAsName() ; break; - case 941 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + case 946 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ consumeMemberValueArrayInitializer() ; break; - case 942 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + case 947 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ consumeMemberValueArrayInitializer() ; break; - case 943 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + case 948 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ consumeEmptyMemberValueArrayInitializer() ; break; - case 944 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + case 949 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ consumeEmptyMemberValueArrayInitializer() ; break; - case 945 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); } //$NON-NLS-1$ + case 950 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); } //$NON-NLS-1$ consumeEnterMemberValueArrayInitializer() ; break; - case 947 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); } //$NON-NLS-1$ + case 952 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); } //$NON-NLS-1$ consumeMemberValues() ; break; - case 948 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); } //$NON-NLS-1$ + case 953 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); } //$NON-NLS-1$ consumeMarkerAnnotation(false) ; break; - case 949 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); } //$NON-NLS-1$ + case 954 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); } //$NON-NLS-1$ consumeSingleMemberAnnotationMemberValue() ; break; - case 950 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ + case 955 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ consumeSingleMemberAnnotation(false) ; break; - case 951 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); } //$NON-NLS-1$ + case 956 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); } //$NON-NLS-1$ consumeRecoveryMethodHeaderNameWithTypeParameters(); break; - case 952 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ + case 957 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ consumeRecoveryMethodHeaderName(); break; - case 953 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault..."); } //$NON-NLS-1$ + case 958 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault..."); } //$NON-NLS-1$ consumeRecoveryMethodHeaderNameWithTypeParameters(); break; - case 954 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault Type"); } //$NON-NLS-1$ + case 959 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault Type"); } //$NON-NLS-1$ consumeRecoveryMethodHeaderName(); break; - case 955 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ + case 960 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ consumeMethodHeader(); break; - case 956 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ + case 961 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ consumeMethodHeader(); break; } @@ -10409,13 +10406,20 @@ protected void consumeTypeParameterWithExtendsAndBounds() { } } protected void consumeGuard() { - this.astLengthPtr--; - Pattern pattern = (Pattern) this.astStack[this.astPtr--]; - Expression expr = this.expressionStack[this.expressionPtr--]; + Expression guardExpr = this.expressionStack[this.expressionPtr--]; this.expressionLengthPtr--; - GuardedPattern gPattern = new GuardedPattern(pattern, expr); + int patternLength = this.expressionLengthStack[this.expressionLengthPtr--]; + Pattern[] patterns = new Pattern[patternLength]; + System.arraycopy( + this.expressionStack, + this.expressionPtr - patternLength + 1, + patterns, + 0, + patternLength); + this.expressionPtr -= patternLength; + GuardedPattern gPattern = new GuardedPattern(patterns, guardExpr); gPattern.restrictedIdentifierStart = this.intStack[this.intPtr--]; - pushOnAstStack(gPattern); + pushOnExpressionStack(gPattern); } protected void consumeTypePattern() { //name diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java index d9e5e94b301..3f44c72f34b 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java @@ -22,20 +22,20 @@ public interface ParserBasicInformation { ERROR_SYMBOL = 140, MAX_NAME_LENGTH = 53, - NUM_STATES = 1262, + NUM_STATES = 1263, NT_OFFSET = 140, - SCOPE_UBOUND = 321, - SCOPE_SIZE = 322, - LA_STATE_OFFSET = 18370, + SCOPE_UBOUND = 322, + SCOPE_SIZE = 323, + LA_STATE_OFFSET = 18530, MAX_LA = 1, - NUM_RULES = 956, + NUM_RULES = 961, NUM_TERMINALS = 140, - NUM_NON_TERMINALS = 440, - NUM_SYMBOLS = 580, - START_STATE = 1508, + NUM_NON_TERMINALS = 444, + NUM_SYMBOLS = 584, + START_STATE = 4726, EOFT_SYMBOL = 38, EOLT_SYMBOL = 38, - ACCEPT_ACTION = 18369, - ERROR_ACTION = 18370; + ACCEPT_ACTION = 18529, + ERROR_ACTION = 18530; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java index d570c25f687..c10ecf1cc23 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java @@ -4618,29 +4618,27 @@ private static class Goal { static int SwitchLabelCaseLhsRule = 0; static int[] RestrictedIdentifierSealedRule; static int[] RestrictedIdentifierPermitsRule; - static int[] PatternRules; + static int PatternCaseRule = 0; static Goal LambdaParameterListGoal; static Goal IntersectionCastGoal; static Goal VarargTypeAnnotationGoal; static Goal ReferenceExpressionGoal; static Goal BlockStatementoptGoal; - static Goal YieldStatementGoal; static Goal SwitchLabelCaseLhsGoal; static Goal RestrictedIdentifierSealedGoal; static Goal RestrictedIdentifierPermitsGoal; - static Goal PatternGoal; + static Goal PatternCaseLabelGoal; static int[] RestrictedIdentifierSealedFollow = { TokenNameclass, TokenNameinterface, TokenNameenum, TokenNameRestrictedIdentifierrecord };// Note: enum/record allowed as error flagging rules. static int[] RestrictedIdentifierPermitsFollow = { TokenNameLBRACE }; - static int[] PatternCaseLabelFollow = {TokenNameCOLON, TokenNameARROW, TokenNameCOMMA, TokenNameBeginCaseExpr, TokenNameRestrictedIdentifierWhen}; + static int[] PatternCaseLabelFollow = { TokenNameCOLON, TokenNameBeginCaseExpr }; static { List ridSealed = new ArrayList<>(2); List ridPermits = new ArrayList<>(); - List patternStates = new ArrayList<>(); for (int i = 1; i <= ParserBasicInformation.NUM_RULES; i++) { // 0 == $acc // TODO: Change to switch if ("ParenthesizedLambdaParameterList".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ @@ -4670,32 +4668,21 @@ private static class Goal { if ("SwitchLabelCaseLhs".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ SwitchLabelCaseLhsRule = i; else - if ("TypePattern".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ - patternStates.add(i); - else - if ("Pattern".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ - patternStates.add(i); - else - if ("ParenthesizedPattern".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ - patternStates.add(i); - else - if ("RecordPattern".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ - patternStates.add(i); + if ("CaseLabelPatternElements".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$ + PatternCaseRule = i; } RestrictedIdentifierSealedRule = ridSealed.stream().mapToInt(Integer :: intValue).toArray(); // overkill but future-proof RestrictedIdentifierPermitsRule = ridPermits.stream().mapToInt(Integer :: intValue).toArray(); - PatternRules = patternStates.stream().mapToInt(Integer :: intValue).toArray(); LambdaParameterListGoal = new Goal(TokenNameARROW, new int[] { TokenNameARROW }, LambdaParameterListRule); IntersectionCastGoal = new Goal(TokenNameLPAREN, followSetOfCast(), IntersectionCastRule); VarargTypeAnnotationGoal = new Goal(TokenNameAT, new int[] { TokenNameELLIPSIS }, VarargTypeAnnotationsRule); ReferenceExpressionGoal = new Goal(TokenNameLESS, new int[] { TokenNameCOLON_COLON }, ReferenceExpressionRule); BlockStatementoptGoal = new Goal(TokenNameLBRACE, new int [0], BlockStatementoptRule); - YieldStatementGoal = new Goal(TokenNameARROW, new int [0], YieldStatementRule); SwitchLabelCaseLhsGoal = new Goal(TokenNameARROW, new int [0], SwitchLabelCaseLhsRule); RestrictedIdentifierSealedGoal = new Goal(TokenNameRestrictedIdentifiersealed, RestrictedIdentifierSealedFollow, RestrictedIdentifierSealedRule); RestrictedIdentifierPermitsGoal = new Goal(TokenNameRestrictedIdentifierpermits, RestrictedIdentifierPermitsFollow, RestrictedIdentifierPermitsRule); - PatternGoal = new Goal(TokenNameBeginCaseElement, PatternCaseLabelFollow, PatternRules); + PatternCaseLabelGoal = new Goal(TokenNameBeginCaseElement, PatternCaseLabelFollow, PatternCaseRule); } @@ -4903,8 +4890,8 @@ private VanguardScanner getNewVanguardScanner() { return vs; } protected final boolean mayBeAtCasePattern(int token) { - return ((token == TokenNamecase || this.multiCaseLabelComma) - && JavaFeature.PATTERN_MATCHING_IN_SWITCH.isSupported(this.complianceLevel, this.previewEnabled)) + return token == TokenNamecase + && JavaFeature.PATTERN_MATCHING_IN_SWITCH.isSupported(this.complianceLevel, this.previewEnabled) && !isInModuleDeclaration(); } protected final boolean maybeAtLambdaOrCast() { // Could the '(' we saw just now herald a lambda parameter list or a cast expression ? (the possible locations for both are identical.) @@ -5337,11 +5324,12 @@ protected int disambiguateArrowWithCaseExpr(Scanner scanner, int retToken) { * Assumption: mayBeAtCasePattern(token) is true before calling this method. */ int disambiguateCasePattern(int token, Scanner scanner) { - int delta = token == TokenNamecase ? 4 : 0; // 4 for case. final VanguardParser parser = getNewVanguardParser(); - parser.scanner.resetTo(parser.scanner.currentPosition + delta, parser.scanner.eofPosition); + // skip over 'case' + parser.scanner.resetTo(parser.scanner.currentPosition + 4, parser.scanner.eofPosition); parser.scanner.caseStartPosition = this.caseStartPosition; - if (parser.parse(Goal.PatternGoal) == VanguardParser.SUCCESS) { + + if (parser.parse(Goal.PatternCaseLabelGoal) == VanguardParser.SUCCESS) { if (token == TokenNamecase) { scanner.nextToken = TokenNameBeginCaseElement; } else { @@ -5349,6 +5337,7 @@ int disambiguateCasePattern(int token, Scanner scanner) { token = TokenNameBeginCaseElement; } } + return token; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java index dcc1f2bb6df..b892a357033 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java @@ -72,7 +72,7 @@ static int getRestrictedKeyword(String text) { // BEGIN_AUTOGENERATED_REGION int TokenNameIdentifier = 22, - TokenNameabstract = 44, + TokenNameabstract = 46, TokenNameassert = 82, TokenNameboolean = 106, TokenNamebreak = 83, @@ -90,7 +90,7 @@ static int getRestrictedKeyword(String text) { TokenNameenum = 75, TokenNameextends = 93, TokenNamefalse = 56, - TokenNamefinal = 45, + TokenNamefinal = 47, TokenNamefinally = 117, TokenNamefloat = 111, TokenNamefor = 86, @@ -102,29 +102,29 @@ static int getRestrictedKeyword(String text) { TokenNameint = 113, TokenNameinterface = 74, TokenNamelong = 114, - TokenNamenative = 46, - TokenNamenew = 40, - TokenNamenon_sealed = 47, + TokenNamenative = 48, + TokenNamenew = 39, + TokenNamenon_sealed = 49, TokenNamenull = 57, TokenNamepackage = 91, - TokenNameprivate = 48, - TokenNameprotected = 49, - TokenNamepublic = 50, + TokenNameprivate = 50, + TokenNameprotected = 51, + TokenNamepublic = 52, TokenNamereturn = 88, TokenNameshort = 115, - TokenNamestatic = 39, - TokenNamestrictfp = 51, - TokenNamesuper = 36, + TokenNamestatic = 40, + TokenNamestrictfp = 53, + TokenNamesuper = 35, TokenNameswitch = 65, TokenNamesynchronized = 41, - TokenNamethis = 37, + TokenNamethis = 36, TokenNamethrow = 79, TokenNamethrows = 118, - TokenNametransient = 52, + TokenNametransient = 54, TokenNametrue = 58, TokenNametry = 89, TokenNamevoid = 116, - TokenNamevolatile = 53, + TokenNamevolatile = 55, TokenNamewhile = 80, TokenNamemodule = 119, TokenNameopen = 124, @@ -141,8 +141,8 @@ static int getRestrictedKeyword(String text) { TokenNameFloatingPointLiteral = 61, TokenNameDoubleLiteral = 62, TokenNameCharacterLiteral = 63, - TokenNameStringLiteral = 54, - TokenNameTextBlock = 55, + TokenNameStringLiteral = 42, + TokenNameTextBlock = 43, TokenNameStringTemplate = 120, TokenNameTextBlockTemplate = 121, TokenNamePLUS_PLUS = 2, @@ -171,7 +171,7 @@ static int getRestrictedKeyword(String text) { TokenNameMINUS = 5, TokenNameNOT = 67, TokenNameREMAINDER = 9, - TokenNameXOR = 23, + TokenNameXOR = 24, TokenNameAND = 21, TokenNameMULTIPLY = 8, TokenNameOR = 27, @@ -179,24 +179,24 @@ static int getRestrictedKeyword(String text) { TokenNameDIVIDE = 10, TokenNameGREATER = 15, TokenNameLESS = 11, - TokenNameLPAREN = 24, + TokenNameLPAREN = 23, TokenNameRPAREN = 25, - TokenNameLBRACE = 42, + TokenNameLBRACE = 44, TokenNameRBRACE = 33, TokenNameLBRACKET = 6, - TokenNameRBRACKET = 69, + TokenNameRBRACKET = 70, TokenNameSEMICOLON = 26, TokenNameQUESTION = 29, TokenNameCOLON = 66, TokenNameCOMMA = 32, TokenNameDOT = 1, TokenNameEQUAL = 78, - TokenNameAT = 35, + TokenNameAT = 37, TokenNameELLIPSIS = 122, TokenNameARROW = 105, TokenNameCOLON_COLON = 7, TokenNameBeginLambda = 64, - TokenNameBeginIntersectionCast = 70, + TokenNameBeginIntersectionCast = 69, TokenNameBeginTypeArguments = 90, TokenNameElidedSemicolonAndRightBrace = 72, TokenNameAT308 = 28, @@ -204,7 +204,7 @@ static int getRestrictedKeyword(String text) { TokenNameBeginCaseExpr = 73, TokenNameRestrictedIdentifierYield = 81, TokenNameRestrictedIdentifierrecord = 76, - TokenNameRestrictedIdentifiersealed = 43, + TokenNameRestrictedIdentifiersealed = 45, TokenNameRestrictedIdentifierpermits = 130, TokenNameBeginCaseElement = 133, TokenNameRestrictedIdentifierWhen = 134, diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser1.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser1.rsc index 7edacef7f3d1641fa1619c05ad7bb504c66f6c15..93d9931b08e51431c51ea7d4cd2cbe3122737b99 100644 GIT binary patch literal 37444 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

7vk8 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 diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser11.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser11.rsc index be811ebe84efbb4f401805f635bacb2bb7fb737e..ce66387c5c3d9bd3a09ca987a24a1655fed11118 100644 GIT binary patch delta 335 zcmXw!KS)Ax5XbL#-+S0lh6FtbBSd;@I5fTCEsiY@YKkIg6B^p8C5iq(f+&X2AlZ;0 zI7AMCP&}wbS|f>|AVPwMM?(#@bWey6_dUMH@jY(W+P6wJ4p1pic(Dh#aAl{wGCN(P z;Q=;TWJ!-wG#9}E2NcKuVrOzRha8HiN<#6(EBBpw_+%>@fEuo;jV`s-eIblgj#N`7 zG$A*+i7kyzYNe#3-J!T~xxfX)aH-DGSrU)3S6MbQ={2kmlH2%+x(p4pD?NEqUgb^t zm2yCNeTQ9UXBjtk;fhai7Oe&1n^zP6+-_sX-p$ZIJy zi|eykz!J`Ig=^f>55Dk?U)hjAuN=#bJZbI;eVTDoFb}4{Yh2?Rj^r@9DCd->8Jgo$ kH1H8B?;7UOKlhDd3RdkDCExWoU(!>f!Oz2HD%aDpp zbCDUA7^RMVG$_xaY3Co0n8|K_$qOqhxbG(eRQBjU#)CZ`qC=JRU0*yoM^1AptIR<& z#A6;>^$lInId!NQ6;!G6nr*#Oo2E3WlWg$UN`h8*xn`Va1P!A~mG`YdNgCaU-AN{_ zH25FP5-6yFG9UEKDcodL`&nm<-`rJ>9$ix}J37mK-mp!tPOFuxO!1r&2Pm4x$O504 z=Mx{9Gw*A>Bk?y zc^j8G&!y;moTqeg#y%?yyT8S0uh?zKZ`w)h=8&h`@079?ork?{*QMEug&&s0e-Zvx Hwo>UoF7tV1 literal 644 zcmY+C%}Z2K7{-53gpsrppr`L zHxu0Fu2o;xS#_&3&aYGFHCuY24!zW@j#J~0bp)mEam@^m2@0l_D(^Fcjx>4?t511i zox%Nh=D(n3F0-ib&R~$L_OQw$esNnl`Zb__{;G>n-mt|Lwd*7$UNOrh_HxGTir(%PmsE@QlVoov H`%>{g(S~@b diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser13.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser13.rsc index dc7ebd2826021840c7ba3498e7aaea8c5c3149ce..ba710c56bdce5fb8b0308d95693a9d81c66a3dad 100644 GIT binary patch literal 646 zcma)4Jxjw-6g~F_3gY5W1Q7x*fk+@rrTB@6)FK1~!5?6uKO~c5ErgC0_abpG^e1HK z>{R>>j-LDCGjWpx@8f>GbMCvEYKpHQ)l7NvFpG!sq#1-~2#4#$*l~Hqo9Izt4idCIX zzMDI%c_PzabEM8tGgLCAmM!ao^stQ`Nn8h?X}`xE1Od66$%6MKmRw&^%2YN&mpWK4 z{(%^W*d@B?O3&exuboIDeVOPdk>au4d)`fbz@6HuJd%mQDWBtwXHX}9kNK^C<8S@; YfzgG_r*iAUPo$p(H%EScnn^*4b8plcqZcjCEvycWm&8wY(7@s8FEL7aTFV37t`*Y&iVo zs2MX`8ft~)ImAJIGx{=?abRp*Wr&FA*!_}I!@VqV35P3O;}9d9qY6x!wIIjeMTvBPGF0z z!eEp52NE1(pXj11J&!(bI}<0TGSyEa#Y21YJe&H6TcUO9oDvM@0&E(pbEG!PRO;1gd_Hzxl6XXd-N4U74o|9Q;JH*;prd}dy= zPW!~n`pt?7uUo};qOGS@g#J$Q`*AFT=#zd7+=w=3XTeeH1I22Y&-pUx8QV&GaTg<+ zeZxGrAy3h6wVgKVZ6!n2t=p!NL;g1?w!w~M4WFxLyZ;4t_@Ce!{{vj*zk{p&H*ksX z0k0AIqp-z(1zZ%kHn2Ca)qlmlG_WP`X8#3CXJD6Kg!cq?3pHNB9@%Nzt9c4m9rI1t zjJQn{E5NmQwj(P=FaDolFVRM68;aFJYYo0C_|o8A!RblN%HW#C6zPv6D@6zR5v{jq z2i2=mXxDm+8-p(g>o(>~=s~j~_Ka_3{d4Sdr%hthewVx^&5z;@pD#vxl6HWYAF-Jq zEVd|He$aXnYwFpK*Y3{QL!x~}{C~)|k^kCJq5p%foPLV-f?Xz~FT=rY1DWxqx^oaa#%>$b!+-z}NHnx#(H06QhSR^4G9 zXF2h6Su3T^x$@uizJVsMq*~Rt#tmpjC13R_>njV!k*0ALTJ?3ZN@`BY^aUEv>=13B zu_jKLKhM4mU}fhM^Yf8~^Wi%jzJ%2{5sd1)y`5Q35Yb>s=e(ua=Ee=DY!fpnW^dAlT{UQz zwJ4_{m7@{uU1;pKq`zf*w732lEpr=@W>49%#3HUGq7rJ<%bYRGC^nmWRc%{nN$SLN zGHhSq6mwjRZ#_vy_hak#HQ4rgYrd;y8+{#?baQoML#Kvj7O}dy>Hb<#Eh=$izxNBp zknP4kOG68u@Iz**lchx=@5ld|?Fv4I{lQ>D)r~>C-&q$CUH&a2Ph#(n>M-9jm~Cam zApIf=JU|a=NtTTHZHHa4hcupM$$UTgQMHmK#YjFtRtN1_zGa5?2)<`*7~6XP5?$>? z>LH%KI(pxU*6+GWL&TgxPD>W+RJ9WNk$Bh6L>;@wPua@o`7p8LT4zJkdXi;4){=Cs z>LGbXJt+6pI6`d8e{KUFm_YZ*nPS7>F%f! z=?jv*9J`Dv=g_#S4P{(&B_)eIx!&j%%8K6}JGzOCm-{MK?rY-7n>ZM`QAL^b>xmts z&G~Y48f;ncgp+<##I=EB*0-b_c~7iGXNNWU$B}_;k%2GJuchgq>_w#hy^x%Nw9hBu UI@8>66R+9_AScc4puK1IKi1xDMF0Q* literal 2502 zcmZXWU1*kN7{{;cNuAS_oNTU{Yr1#2uXj45Q4y{dDnyheEwv1Wo)n&R-cdzIg(OHu znH8Z%_98)1FoO;vaJtmK9E1@bwCuyEPCD!NzwY~a-whA0|MkBb|53Sw4 zG_#6XalfCje&2z08!{;LlPT`U@$_Mj`!R3`>w=vJN30tZt7U${m&nf8Qu>Qg>nH0H z;|!zEA{%Unjd)AR&{MX?4xtD9Z&0k?-pUp+zXMOJ{{^=BHL%nF1XueX;4S_;xX5>d zHwgVn*h2peToAZ6a9v=tU&X&Tuqm+Jf5o#Zu)}|XcLlBys=uNO-#Oc(F^gOAY3yxw zO5C;;OTo27?m-V0oy2EhuOTByf6*?q=HRP>FAm-ooR;LY2G=O2On(|ZSZIe%BkPJ4 zpjr(U%fnt4ya}ALF<(Rr#0Jgju^(OK#@j!*kt@|r9^N;G1=5bHVQS#qx8Ge1y_ zs9Ju&x)N*H*{@n|&DBF=eNX;>=#%Jw?WoZI!B$Pb!g|GKsp#vlz5WjV;5L~o|Aoj_ zWqFfLnim^Vywp~;k8|dgIh^b=!>{DHdN`cNp>mAB$lgWwW_~1Vov!ull>AzCo4Ix^ z^NZOkwa)qc=zHWUDlMt{=C}cktQ4zW=Y4bDD6-Vge6MCFue4?-oo1l^%nl;!>ucha z`OEB^*22yw<}*=+nTQ>ZSi)+Y2zvEh-pVNNlTl~M=DelR6x&?4$~I*Sv}PBrd(#@` z@_OtdqsI#KIN4&Xk~MlsbIDby=a(~-U#+NXF$BKAjjN_=Gt+S~JAn+l&iGDiikl#< z8g0_vg_qry_77~g_SVlJncF5=_PiZSEb^KnE1`Ou<&0TIvB})3YNKH#trO45u!+EZ zjPY~K^)waTkFVl-C!X@=d{@neya!LZxw^4o^M+;?xw^UO{#wyj^u~?7>^~OkZ5RGe z5v?afj z-~c((XjOE&=+;}6(2vB|Y&u@A2YkwIj+T#;yG5(3TUtf(Y>5>lTWjGv;$7&P&^wSr z^!5!SbaGzw9#-{U7ptl8x%eUm`h@Q#b}H-J;WbOBdwkw*3Xky}#4b9br-Q6KeP1`~ zt>#O4+!CubxYu${Eyei4v@@&i^pq-qPc(8 z!_7)B&c3+)s)=5;hLy5XPW3u}`HGbt2(RZcZ_r$!u88U%d!rUSlOCi#j>q*J4@xm)sdUx{->P`zluMYvL)II2g6*Mvwb)a>tMhz7!jQ zEeW1*+*d|k3rJ=C?o=c1inZwMuqOW^Dli%q(7C=5(Vy6>X#H`adEwJOe-8f|nMA~^ N_8IsLau@QE+5b=iYP0|V diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser15.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser15.rsc index c8227d5104461cd3eab63418dc8c5041315e4c48..a931aff18f39a97be5c15977993f7e88f2ac1c6e 100644 GIT binary patch literal 1684 zcma)6eM}Q)7=I(}^?KLOyIxzMg+fay{h%!^E$x-|`f)9OEJBoQ$uKHziW)RTB|(ha z%$68sOBRC`KV~+UZ3*a->2!-TK?aMEF&&6xx~(IQs1rAqI?dGK?#-=n7_;o3d+)vH zdEWay&+qqp0mvH=G_hjpM*yUsNxuewx(q<~@UdNcbve2d+PZ-QR|KrjGI zHqTK2939>!oc1vFoBD+Ik@}Le!1=(HsWxJ} zWS{%P{*UDrMNthXa70%{xgKQ~$&As!bWp1S$h)04iwt2l%r3v9Sg-h*n}?wc@e=?T zEyi(~M0r{{OJqnh`K!vp#iqR5{IqLfwTL|s8gyUqr=1|$P?h!l5Ka5%U@bMpM`6r< z-3gexFv{%n&%sInV3fE7^PXgQxBZht`{zP~(S~RmfYO`g4^^{pntG`WM%^TG%STXLHmuxF6cPpnORQJ)Bj&sTB`s*egxC?h5bu#_ zB;8U{`gZONasxV{`oOb1(VrM)$(ohoR@QB*ud=ddl0rv^$ZdR_EK9zS+?4E0o=<+0 zyp}3K@%UJ(vaU8oQ#;hPiDvet)N9_c)Qo8o>IoC3-bx)xWuSUee?tAZdgGg%&GF9o zkhME@BX%|SXLLf`3eQLJTqOXy6?|uWUoZ|k!j33dyin1P_vCtc(uHn?bd*zG6MH}= zAuh=-3iQkXxq(-b;0%(DwW#tFddE5CX)>dnEkgv;jt=8vkHcg$8WO;|7xqA8m<~T7 zSnN6K9pm|>R+}avGZ0O+s1^?mB58EOpBA^;uZ!F$&eSt^qYd6|9NTluK8|sYFQP4W zpPzthq5FapRAm9cH)4D8rk~cR<}c_Gs8pmKY8CC`)v6oL`Q}-=CC3#-&`(gk__xtj z;;edEv`?~Bb{OdrwhL;-_1GOeg%632aReyM9yxV;zeN%x)L36M^xSejJ57J+TwuTNzt}zRk z3RkhUo5+;)k!Ifl=zXRkG!$!#oe~X~-YgrJHJUBPUFJ^nS@n13hvjs6XZhLkhnAqF zThpNV#4=GqRWzz*E4nKttdzA;OKO*CPg%dur}EqLCktu{dI}!cw%ASO=x+_2klt7K70Z^>=D$G!zImoBlNEbS^= z3joAowB*nj$NvkD@$vsdl*2>0ctp=eW6wf7rpft;=o#o>`N$LJD(ReOd1dhKM{(XU L01)l6MgaZ>p@Rku literal 1678 zcma)+d1w?@9LJw#cV_mQ-JQLYiOF6`_L%Iwo4sc;yE~9#8U%^0Vll+Jf>=as8;I3y z;#HMejA%$&gsPQBv_?~us8woOK_sb#YBUKpN}G^gVgp?-I?wH5BU1Xu3~%1=z2AI) z@B8^Z07}jan&~0-CIGSl8UGfX0)Q23x>Al*27q)fy&sNP9km0_0w8h#Ky}kC0H|9W zCIE!x!nKkS$s`|XHuK+D4iNyLyQfdu!g)CKtMJH$uUqeuDm(WO7}ds+Wk|A6mOJQgm#7| z)1}*lg?xpLYg(jQ@o{k-saSlFuqy0nk`!(kcbOY%@>dsPd$8246vpswz}J z1E4ke+e12clm8YIie){+p$#sSS?qlnJj?Wk#^7G9sSt%R%H~4pJdD!O&=}ka0F0`- z;kxH5{O$j&(S^ohS!OZQ3xH|5hEbn@Cs>{|_L&x%_%jmR7w$mzBBl7Sya5|QKNDpU z5+zWld z(sXNP%3&wLp@f zANh?t9(=%EjK`HHsa49EfSM*n&FU5l&X}lfHbq_V9fB3%E38tpiRP&$M*V%zZOb@x z2`cm7qHe~r$X;wDv_X`mY^W1Ml7G^9X0gAW_jZtu^6vBA5o?%y;WXS$o?#d2eaKgR zUA(2_&WntaS7476NtL{*Z9oK&R`R=I-@J@l-H5^f`w7yEw8v(#oStV`(#Z89+l1?p zb)r|qQ<8egMf9lT9`%(hqHK{SGz+CIy4R$4WXlD#s?&8JcS_I6&Uk{MO{iKE3`ALr zs`cL-q#MPTAqQ+WefmWPAOY@vRyUV|g7ff(;2I157w(U_om|PH_}=A7PEHR-TM&;+^rn`1N=`QJLVh$0JK3InV9r!NB&q59&_WP58}$ zFM~qwM(mT?araZ@Ok!-OmG+sbT9Z9VD} zw%hhH`%?Aq_DTIB{V7MAL2cMz_@OjZdZ0A#IP1uly^daXhRX&?((*C6k(?+`);851 zEZJeR#tpdSzWoka@yEn>@&_d+ni?+qiLZtZ`y6;?@*}4Y%8iUPyUx4 x3;zEU74^_p3yNN@h6+PHmhriYTzc5e@}Yv$u#1(!V*eJ%DBJ`XQs@`}{svGK>skN+ diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser16.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser16.rsc index 49226f404933c5068f9c31b88bf20e4b8d588431..ac9841d8897a50f8e579a63a0f3fa313a337343f 100644 GIT binary patch literal 2528 zcmeHIT~n1+6n>r!f`{V=V4ULt#8<)65iP&Eup2`hjS@8#zrc@6nx^R@wXlrLA}55& zJcBee5H*!brCE+C>6nvUoWpRy>;nsEx>0H-@2aVbp7p+A<6S>M_Ppoa@7`;#wVvl$ zYXboM6E9;Q=3oZGh@uvyC`SlmkcTX!V+y9C2xGAnIhcSnIJ~62bUcV7Sc2(zA1!zX z#W;#XD8y@c9TBu4j(gCFH?a(@I$7?YJB3g23C`d%oWogM#07kX%jnX%&v71c)+>WA zkyIA_%A*x)P>o@HgP-sne!!2oia`wFTYQfc2JkgDVHMM{5$muP>y^)O978)gbh1ks z6w6Bqe!&$y$~0`iYK}n_Gth@wijzdI@{B9)5$1CpN_mWhoWSvnVkUDK<|O7a8%e&1 z6!-I}Vy5^E>-e5#NxsW9T+J1DlFPZ)N7&`ZZ!>OK%GsRDIlPbeaz5vAAr}bWB6(Pc z$N4wk<{u1;p%kCObKHr&+>LrZjTg8J&+{*>7jl|QbF(xnVTsrvu8XG(+~5HzL}dC; zKl2#Tu6;$ZnfA_*YF*4HxE*D)L8F%A>OdLHh=BottB zpgBjhMh(wmuogYiDK1|vAaBTH6*stfVk6;ZqCpH^Kn+S=u71OMPgX{@_Ankn1(s`N zHV1J{s|k7Q5c?7QCVx>qmVL3*(h2RB>20Ho?QXjCnxUA6Uk?+U#wx|^W0vAqVI{L< z5y39KBbsgTzqe>-ru>%PLTwcrARk3*)tu`io-E`=!W~q);SZR&-SR&VX4fYSTNOol z_-uDuT)u&b8|y+mjaS53+=X#KJe^jq)0E3&ERdd0@B}<{T%Y*t5?Ws~H(z>1xH0&Z zs++{|hx~xQ<8ZL5Y8k<=JTCiwRYF4hjcDN}**5Ac!5dQlx?4a`Ooi2FHcn}z)OEo) ztKK`Kt~)3D%j&o~^DVwm57u^y?yy^1TERKiNXVwu}d~pHvnNnlF}@ z5Gq*B>VK`{ZmRQmi91YJ?$BGA`F8bMvEH@sYOSk&nDDWVA`Q?R+R>XPKy26p7H+pR zo@BxELiK=@4PrKG)@V_%n-Q0#XPmOV#5hmzWATzDO;75!iAkY^tfKZvxu{sI^yk)v z9x}BbQ73AT9uJCXGSe;MLDhAis=QWx)uXN|R_CO!pC1XAY0xYMJZ^R6x*0vxxQK42 zZ06{UCpC_8m_yi!sGIBNAYUA{Bc|B)l*pIOMl@o|EvAvLeLLx~#^}00c?)2}ifZIC1#w~J89&2QE#Vq}^6}V~tA5^Uym?o}5+&a3aJ1NFj zec#tLJIGE&4N&x;PJSw78N(hwH@mg2v4Puc&CTFd<+_Ev=1cfZ;Y!^b17b$1a65b5 u-I}e!L;BAkOPyJ0{K#gTG&Kgc$*MyvB)MIARq&c3#c=2E4g>##fqwvo|AdSH literal 2526 zcmeHITW^&`6kTg5z1rFqdU{S<@GG3AP~_?@F(yJGqE(;>l$+)DhB3wm0WFFZfl4ei zA}1{dL#;*ys$h@=p+z7O6Hbe5K>-Dn7pc{#FKYD3wdb=Kp8NxJGW}*|@7b5N_MQU( z{1aQS85=PUqmhLuR-*zlkb$8nKqgW!0(W2}(lH%*$iWaeNm4KkEtrZ?_yEm#7jf*x z4wT?^ynzUIBY`n!!&`U=yL4}czjX+Q@d=LLQyjxloWy7N0;ka~ub-m}J-XkC<4CYx zQS>Q}U6_j}@IAi9HC)7HT)|hkitlg%m!$m-&SNp=Fa?V+AM>z45$(r5>_Mw;wkw9X ztd!v=oWtWBf`zE&P}DFLy%;N>UHDRwCgib&MVyZc?qdman9V|zGmlvu#(d_Yi?5)E zo48j#d-y!-_`X(Me2;Tk&4=*}XL6p;vEBRMZRqe$j^hN5=Oj+#6i(*dyi1wgBMbBK z6#wQs{DWD-sE5zuMXtdHu0uVa!^>QYm-v^?OIYg2IO9Ts=odPv_>o)14w2?(9}5_f z)OJxUp?y=O*}?*4-l26WcJZ2cN|+sQD?^N?dmi&Wi@C_gZMa>C7hpJsp%{fB-|Y9c zd(kb7S|q1Nz}4D!YTpdxW=@i=Nx;d1pqOJ9r7&K|{MsKQL0 zl=Cva)oBt@wu*xYewB}?rsWYAXSyM2rM@;QxyJ=!ZM5Y5HhG4ntdZAVW-5Xj%wneG z5vGdju zJ0|_pIBE9PCkX`7AAt@oQNDqO;TT{GPl)X%6uEm9?QZuVw__tuxCi9*7dMRCT@*bo z=8DucFDUkt+|J9qs@lHd#;Et+7K;h>Sg*WQYnCbQxNN5Pcgv*{8+eTiqC_HiKC=+qBg}{RQS#IYwN=R zX_80Oi;^+mHX%)>xyjt7KI%oKD|RL7t4?)RvoNX^XPfwuG7}GM5(fd7yQz8=1Jt_V zdY^Kcr+b0;*vqTDf;EV`3O5!-LTL|T@^7g1(~>$O(CtY@dV%+O0x>aCeg#mpqT*vbr5g<)!bOft*jL$O#mr=8D{ zl_nMbc5i@fOcUB|{>2J$t@AZ*eq*w?Oj_qm)AU(|->6>))#^h1RuoCTd{Bl8$zSuf zf6!_h+vGXSp&NCwGh3Q5toM=GYjueYTw!N!G|wy2r95l4l)te%TQ9~%AtOe(l4o69 st2uZ?zYEgTok@m{bXJH@%YTKmT7^N9D-~B2FUeC3xBhM+@V^NB1JQDY4FCWD diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser17.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser17.rsc index 3d536ebab6d92144cad6d7268872fdba7e5c0c5e..2d4ba0655ee566cfd759dbda780d493552cbafac 100644 GIT binary patch delta 29 jcmdnXeu#a793$gK`9qA{jEu~TjEqdoKx*@I#%qiKW-$g} delta 24 gcmX@azL$N193#_4`9q9s%#4hTOiY{KFkWK>08(!TSpWb4 diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser18.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser18.rsc index afbec6dabca686b42732c6c95a7a737c13e8642e..17a7e388956871fa8eee2554edfb82e35d76a0b7 100644 GIT binary patch literal 17738 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 V+%ixrhH4jE#JX? zksFG23@mS#cgQyG>|lJN-Nnxfa#5ayrVU^o;`b5$O@KMm+3`+5eWfSrzsld_@A41% zCs4CF>a|wXMCo>214ho-t?l=RaviAGb6cB-vNK1$ICIqGM~wOwY#wYq>uGDZN|_nD`mL@~Y4-XFW`bwAutfnmt^S^+29hf)dE%H`;ZWfXF@a+s( zd8UvOqs`8nc_dmK4uLhx=aChdvlY2M1RA~-o6$FJGHG}-7!m{UF0OsIcaZl zZ5>DJn#eSg-)oegs=r_k$PWu!&}Ua*CHkHGIZ*xx?j2+Omc;sf3*Xdx^8y(1By=7@ z-dDnU8`jH1D4LNp&gf;G5jnaG50?2|=e01)YLt+_v`dz2IaJ=54qAqu-@=TBQAF6P z5^9Y9BrGyS2C?|qfqpWBOk;dltu)QE-ATgM^<1M(*~&~y&v2-t?&7D}iSc^~_Uyyw zGq9@OM`?YW{h>1Ps>(hi&vwQlIhKnN7G@XnZwCG?gCzq8UV%hkER!6|UJ1*f7Zz5Y zhbv%lyTn))J?%m)eSI|2xFSmfyU7>&h;0@{M;HE0ppTm9qp9@gi&yi8g|+qqSlGHp zJFzSrtFv)F`O#Ebn%YCGM&SJBPYE+0m??MJqBfb3ZUbk2z++nw!{s?U2-1FxZBX_5?y8E5ibM#>3*X8AA z^rGmk3WkElRb>oY)cc=R@WmxFprgGFo6}3ofW~N6L~Lyu&`WXFVZS-J*Pne=Bp5*FZQf^Wu<`VH0+x?)JwO~-CCxg> zj3|#ofs_2EJtvUJjdOIYUCLln`6(C+AnF2 z2-WvQxlI9ySn2pxk*E;C3{ytZPqa0xtRVTw1?KaoInpvXG*~!@v=E~>0#C{#>sV9l#HiEPe*H7du&Ooge?~cVwUl= zm194xJz!5;a<7Dapn0Cpbk}n2hTWpotaStaD_f>}F5oI++PQMLWy;zo742!pmn~y! z6m_j(7WLZMhb?5uH1;?Lt5ELM{fcGy1cht%Iqk&yCTLH4wW@up+Knw?eWgmSAKvoGqq;9PyJ4P)2W zIy{wSuGw2beu{PO9^~)jwbC-|>s6P;T* z-nw;B^bL$L=Cy@?{x0Kv%`30UYf)VCT&I2xrsIzMMXTFU^sWL?#IfC`gJ<=`v6_x; z)nRWS*?XDYacrwS=+!NpHTA<0>)^Rb`E4fJ<2bJs+U#LCh`y|21|74Kj!{wbP{ujy zZ`V}cJE2DE2sKm8`OOaUWPLg3GUmAR4>5NcF~RvW#|qY&FrHV7yg!eSd$duC(UYnc zZFgj+@M%^#eqyDmXgQqumiwl*=poa~EB2(|uz+2T!Pq~>$qU)bE(k{nY#!NT4n~Cx4-7=2E zW>!7GJjTc~S8yl&PM^=;tnVJQ2;@G~&SOFZQ)i4TmT%kd{lBl7P`tS{f_QcCf)Ka(cCiL9Ayjhmb+R&a+0J(6c@QM{FBmnZDHL9OgKz z@0;o>=B7#IEQn9n$rR6pv*Z))Fyl0{+%Aj{_6omyj0paA$L|t*TGtrQeY^F1+WF=ujot}!lFbzbvL{iao&Z+3Va=+2RN$wQM%k7us3}Ylf}L2 za)v*PZ_ZNxOTD^g3OKRj3dNpmWrkEe6*GjrElzo5zVZ0(!edIMTuA@<^y)y6Ki#^+Y+I3FdJbSu+BZ{zob2QfGZ5He{ zTDM*tt;w#=|8Bif77bcBo;Q2rlU1x=@f**P{Oe}Vk@gqa8~Ia{P3+DAKEP69_1q*;q+~@_6`9Rx19Ljjb3y-G)oak@$T&NW$T{&I-^i!+c+W=Ur(i_K z$WMOjpZq=pHqMFf$G?=nfi^7OKnwNt5&8rayyh%9C${Rhv}?Jyb}Nv?{q39Zv--wN R_{KaM|Nbbhea@|8{}-~g61o5Y diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser19.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser19.rsc index 423b9a7028d587159012cddada36280065bb8126..1f8f6a559ba6f4915508b8e123ef0fc9bd265d55 100644 GIT binary patch delta 263 zcmXwyJqp4=5QX0a5{uYLc1+9VM@b_uEP{7{}2RA(HW0*bl@~4NU(!ESzn+EKx#3_ura2JEx3F zyP>*Zq=GZGLVy!O$#sNCVC;jqG4erSC%!~blJ5Fcm0SgQ;)Xj4AKCDHwIy+S54H7chGXHgoZy?W^n>-!s$ delta 279 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 literal 35540 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 R8A^e=iWpKh#~Is5003j@6v_Yq diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser21.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser21.rsc index 02e398dcba0fe1069f1b99d37259ae37f3723f0d..a100450acadf6a340b75a43bb9f401b2ffa80dfd 100644 GIT binary patch delta 15 WcmaE1J;7#!E&oITjm@_FtN8#iW(92k delta 12 TcmbPW^TK+AE&t|J{?&W{BCG_= diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser22.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser22.rsc index 7c9e139b0471cd3a20b1855362a7651bbd89a994..50ffafd4c5a5be2fd337c057b0550eabf83f0feb 100644 GIT binary patch delta 25 gcmeyw_KR)9a>mIk8Fx)IV40lEmI^8TU+1WpbIkn&~tES#}7I diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser23.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser23.rsc index 84edd5a11b9093fc1b07128292d6d1549b8356f9..94978d7e63282cd52d484e643bc7310f34b81a48 100644 GIT binary patch delta 15 WcmYdEnc&E-!=T8(z#u-+Lk0jFhXVQl delta 15 WcmYdEnc&E-#h}Q*z#uWvLk0jFcLMnU diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser24.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser24.rsc index 01b5963b7e2b981c2d0081fd05b1955542dcb425..ad0effba9dd19b4ccbb9d1f4c00603316972e1a1 100644 GIT binary patch delta 21 acmeyw_KR)9W~PY(ER)|e*#L1fkO=^0atLn# delta 21 Ycmeyx_K9u7W~Rya8RaGl$U&%70A@f4MF0Q* diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser3.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser3.rsc index 49d66c6104f554dddf44fdfef5df90cca72a12dc..6358d99356710f9d7fa47ee3c54e2cc29c81523b 100644 GIT binary patch literal 2528 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%0ARYffd&Xjmo9azjx&^oF+U zP3_d{+NMDjnpnn(w;McrxN{dc_ky#k5#_lfufM=7-PAAq9wGKoO%u1modtcWBU-1m zdPQrrPao)zKG8vatOL5Q{a`t)Q7!2s-P2wDtPgctw{$~45p{xSlR8DbD)@5TdB0Vm zrH&fi(}{3)w@z~USo8c85h_Gj!_Aw?{D{_vyoSNDku29~1K8@iPV`A?`M3T7ZH^O* zx}zt0$oqNjH9HZ8m%Beg@7s?NEB6vSnceH5mJR)=Yx+S~^}W8+6@9DAx}u!PaqfAS%4nWFqF_ zbhyzh9)*!SSPsD6L0CKloBLpHKdg;{e>$*fR0ZlPer{?(U+J{I)ERxDvv6${j5VL0 z;5naN9q)6U*JnCM?Mf+lhQLtmp~_>hbrMBbiOXd59K>^>3#{{5s<>L^W7KVhs5$Ud zxU+jVx^k|Sd-gc5GiXM{D@v+_~5{h>>jS_u->flu8umpc5xji5*2pU3oXu!+q~X@`@5jJMIYX#1Mh?7IysI|8UH`hV1`;= zMwwU9L{ptaL4mq$nU} zKj}#0ptK{!9%R)f8EAV>l7l=rvcVT;(28^I)|1BG?n8HA)QibJER(6d)jbzuPxI3n z$RChFmg<#wzl_V(Q4oVI)0TYM_r zft+oFxMiM9dPF_w{&2Ii^Eg2_KHVE;rHaQ|F9M}+7H1#9-3a~KcKw%g+)l?YaM~3t z(K}I`YVh(n_jtB0hUt2Onda`Aq6W#VtR>HYC}PCJ>NuX!uHu8{bM>CC8##ERNB=}K zc?SHma4`(48}ah>!P7V3Eo;LJ+ltF?!tp(!b787)3Cv`uW{p$Xlx*C=kI2P(i1g@Z z7wJ>ay2xebd+M`Wg#^-ah+Kn9S6}qJyRb}Gn6Rs~iq{N}6YQ zqB-B^R5*u{^JHEOmGCY0b))zDxXaw%#x}~67eOvwOW}z*-cN(&Mc?wKG|H@9dOWdS?A)}O9QUm&Xy%;L4qp4YlXG5VYkkJv`jicJ0m7@f6UJe(@9Lpg@9-PMcB($V4y%nUENGzWGqxa?kw*Bt2cl_@+p&1 zRCyv z_od`C_f9^9YlvF*?y6GgMXS$V)9xYfkiEOedLG~g^D>G$y$k-T-vUN&(MkOF`*@G+ zmqk>AJXMdo+}~I14<+i}&4t}vZO`nNfwL{cVLz<>YaXGUB~oXOy?Khxc*Z36u3;j1 ziWk|rM##yYnMHN(;z+6SHr8!BaV6ZV!yTMlej>aJ)| y+Y&vh=DRGP+By7PD(;l%dt2wXwthXhNQ67B-LlrFW3B%Sp>Ky%^k`mj-v0q+$B(%H diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser5.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser5.rsc index 86ce01ce0959a6e88cb2669b14a20f24418bb415..a0f84f53b5baf697e69ece6f249f5915cf3216fd 100644 GIT binary patch literal 2528 zcmeHIO=whC6#mY+RiOo`65>eB^z?S#)wGI)+cqP+X zO?+bvx0g70P#*AAJ+m3TIL9o7=9$HNw>Ft1VUMK>lepdC1jKe#_7 zo$x!4i8s&(lM!$Uz4g^j!ViaN28xr_B*Ta zJSOiz2}SuG>qolsl)7&FY2?mMmukxuL zrIq*0BswM){m!!|MSkFZ&hy^Hot>5``I%aFn~1giiQ7{0n3qBm1Ea8~Qe|G%JdZ?ca)@==B-o1gBg1XZ)W3R=o&8Jx(^l`&F4tJF zeHjs_tgF*5jb3bjmDALZGMS9J`8Soi;~Au`yI0soT%w-~%lEONp{K%55MlHp3nlGR z>RUEyGc@Qs`y4*8o;Q|G$=-;!j!O$?G12Sn?S5LW19w~Wcpo-vE0*__bhFw=K8LQs z9`{pXy3|(PE_&^5bfa?=A?`uUaNuQm43M-sW%46+vkQ39(*{qZ1Tt*9j|H`2! z^w3Yc*JU@_s_n$Q{zI(~Lyz9&>%=8{(8qauAp42-jBd4wqQ(@lo1xdOlMTS) zaW2rp{fu=ikKD*>DB?^kMQ)nZe}Bhea@ z^0mpGdgz*U8OiB#NJFY~_}mb7oGen(w2ko_Z+b$M`WqSW?)PDm|2F1(9uHYZMNi_# z7?r*f7!LLiWG_}l+>2~>-U5DeJ)wt0%3)vF2iiN&-nj{g>ltU!xsy>!KfH(R+5o>3 Xv@LK=pvAR$c3sc<{pmddYa{SKL32(0 literal 2526 zcmeHI?`zdn7=J#`!9T#1A&K`MU0y|OQDb4kw%ai8>du>pL@YycL@%a!8xbfZE{G6c zMC8zs5Q7k;k%Hixz}tNx5pfkM9E0RiFJcg}1y(DF`aIA1-n-SQ~ z=Q&>yc~>H;+9P!xmOMJ-O%-`wf^O4My&O99h&J&WuE{0L>Kgf8w#s|*EGdSH^pm2L z`9-Y5G$y&qn=DlDkV}hr-L2ijB+}`ltrG1rFYaB#wA@TG?PKf{p@b@~%N{u`o8`XT z!LRa(e8urG@{x0|ypO7#-n=m0ju^S;t|hKz(YCow-P3Zz&L1j9#|ZS{mBG0%t!n7Ic`pbpD*rOZZ~SPNrRkH|(RV#+?jpcNk=}FECHpJ~`u= z%VC4$Y^}qT7ijkkGeBy`>XEnPLv)~EpVVcMm_9~9AE8wT?YEe%<|(gh-aSu9lL*Tx z&dO1HR?3n@w^?j{Maz)(Ne-WKN5g!R87up`Bu(;7qN1F4=tu7R7b{kmcd(P=S-dEF z(5a)8rEEo+WqyyzZ(yt?WV|ocFl0E)j$`0BZYPno{KhDqk-NHuGxLpG*nt7xwT1x< z*zIwfdO8VhjGv)RPB+Q%)iC~Fxs2%{Z00VkE3Z_z@W$g{h@pf*~jX3%*uM}Yg;>>0> zxp~!KchTO2h>JY$MbE3fY%SvZfRlQJ{acgm0rEKZyEQQxE`GnrPd>8`8KGeMgd8ui zTkbKFeA}!u-Ky!4?d>avVkmOXJF+a}?5JM-fzqEtQ9tMVWb}qU!Cq@%i20u4EljnU zVfLoD)5|HpX{09!2k`=Vc7?3x_@&j%clXgP8!6Mw>$kcw^GdHzs>wG=Mz2Zs)qTzn z%cyy_KCX^>q$rEnpH_w&6GYm?gkHj8cobK%*ca?3qau3^uhSUp28>$7EKWq1z3h~a zNw=LjX{_4(YOKO5neQA9o7TDAzA9lNrdQN{20EVH%Dusf(7x0j0KQHYAN@RYEdNMMABS3_UuBZ_oJd*4Q= oq249@FOcSvmT`CsS+RqhM`+PS8e!$knrpW;`v>$O1FL4>AH`^A8~^|S diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser6.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser6.rsc index 971db9ed7347f4558bb15148605f801c04a9ce4c..2f9f20c719b7338bd74783f6fe2a40e933feecc9 100644 GIT binary patch literal 1688 zcmb7^S!~Tg7{$*=ZWOl?O6@$@Jzfd^5wTP%B1ltxpa>yE@L&tIm8LCvseO$l_C40x zy%EGx1c^jQJkcr=k(AheGwp5f6@rH|>o;f4ocU%XeNm}KDoYv4)KCrAe5Gr!<|#)D zRIFPHl%|NZ( zwuf?xc2M?#S$4tdP<97}pr`K@5FOYW`YT;uFKNvKi^1$)wASj1sYopw$qZ1ZQlbwX_zra>0H(=vQUZ-d^K^V@OqF zeDR$6#%wRJ3e3d4VqDBY(O_J4o;j7t_?Y4yosZu`@jV0oM|!8jXo`4MIp}#0OSX-n zOaTKJxl6qZM8R2wY!YLe|LRHXKHXgwqur^Fph$XZQ(-zn>nq4+MmD*M*ZR?3&gf(6 zWz_e;0)LWF%~`@Q)t+XOKWj4a`#=YAV|qesHT6d7EYJ*W0hbtiNPQG^1N{M6q>t1C z!6TjY04V&pcxXRc@RTpNCqE3)P_=cyp}9eI$! zEoPDjQJbz@z2*&-^P0-w>Fe1_bf5MhOH-*0VUN83VCY)=E?MbRrt34U66;jMBL0C1 zHpjV+55IGFnAZ{UWh4K#!emiMOVHJv7h9Klw43$W(YQL-pA+HUp^KGX=v8b->&Uq) zv_=J-cex6cU+qGce-n z<+b~7*Avl&+X?=7BeDa`-XZQHI|Sa3xD%m7cG|`(@y4$aDXXV*TAFZQ+sNWlvRO9E J`w+zWub;xc1$h7f literal 1698 zcma)+S!~Tg6vn?pZYZ}BO6`@{J-P|<7qK-dNt4P=iJhP#c(6sP_N7%cN|U0s?}^mD zy{I>WSZWDggv1l7NJN6zelzXuy%o|vd^2-q&i~AJzB%VF>AR{lUK12mwlbBa70S>U zRbdI9;c&}_2HWAOKH4)YW)Ub7E@R>OUmd7q|*Wfp*|Ho>z2JH&m%>XnV^m9;?>)d*Nlh>;0rT2``q& zHMs#>St@t*w6L$%a#11J^BdezTMzE$kk|aI&9ctc30|w=BX(UywDmO+rYe#wlU>(c zAOVSmF~?3otQ zdG=y2DtdpGE#*dOW7Ff3T}XF`=W>#_GW3mA`9B#C_1Qo4V_bn`z2IxtvyPwiQmd71zN0dOG=mC*CW9PBoJ02|g12><{9 delta 82 zcmbQmG>d71zN0jQGJ^_(CW9Plm5Y7<{9 diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser8.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser8.rsc index 2ef5760473fa9ed473a6f675b77a6fb5a328c8b6..31546613b79b952507724eb01c80a4c413d0e3ea 100644 GIT binary patch literal 890 zcmV~$17H{c00gnWpKaTAXWO=I+qP}nwr$(!Y}<*XLprP@I;vw@u7ldAo!YOBT2CXb z(OUA;f|g8UI)^yQF-~xjQ=H~JH<`jz0-3~Q7W0@zJmL*+dB;S4P>b5U=YzItyLRxA zFnn?z=XE~k=QCgUN@%`mo_=eCwrRH}YaRJ$r}z4xkNTv~gd-C1DM%5@Ql7sKAQ-_3 zK}bUJKzq1PUM6ryE6779y3w5;^rRQP>BC@#FqB~oX9Ob|#c0MbmT`<{hl4u=DK%YZ zh)iZj(08(uiqxbbEtxbydv$=^#3liqiA5ahP?vf%AujFd$V1I15lfuN$(-CNoYJYB z+G(8D>73pfoY9$_S>rW}m?Y$$!#JG7JEEg#h8F1`0!$EslAXTvqdx-}$RLMwC>L>2 zP1Q-#k&Uxl3Q46$KyL4Jtbxqgx zgXpB73!6E|Q`@l|+c})u1vN)=wM?sZTqkr&=XF6BbxF7MNKf=s&-F&{^hICwO+N`w z6rvG>c$A^IlA}AO<2arZIFi*q`c3%Iz(YMdr%il%9{7HWx>YL(9FoUZ7GZYod@ z^-QnzmWU)F2RSJ~AqrEJViczg<)}bKDp8fjG^Gt~=|ERzFq65gWEHDf&j$9gkNq6v pFc-MYRi5#j7rf#ZzxiW1h=V$s<2t?*IEk}5o3p!+3%i&C{sYT!42Rd0VoQSt@0VtVEKsjvPC)uFKwg&+I+QFA{JWyj26=|nQhzFWQ(*bgg=iT8*q zRx4a^#f@^f^VqU^LEMhTBSjsY%vx1eZ;-Dla znpm9WQI%j-up-(LNK={-L~Dz-9Lpt~+W0dbZ+z%YANocy0AEHkmZz3PUAD;ZL5`GfN;W@P-ZfV*+emixpJ0^ zI;)Gt+C`evj*Hynz3sLXE2SQe9e6s+RplJng!&C*GyBQq3b(n(177fpze1H&Mb#Wt zRLgq;d%46*{;7s)Dny}*uuYa=$&RiH>obVK3}*xJY$Sn1lGx4;lG(`~Qb;A84EAw= zOtLt{VX`^R1+H?PTioR>g_Nq2s;atb$y>gvqX4y3TeVY1b#pva_a6Nj$OuLLjU#%6aHi}dyb+wTHi~y%N diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser9.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser9.rsc index 57ba5865c2f2b3041e7d285b87173981bd71f383..99865aff6467c965274a6cad7fb21dc11b4caad9 100644 GIT binary patch literal 17638 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 literal 17552 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 1;\n" + - " ^\n" + - "Syntax error on token \"r\", delete this token\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Rectangle(int x, int y) r -> 1; + ^^^ + Syntax error on token "int", delete this token + ---------- + 2. ERROR in X.java (at line 4) + case Rectangle(int x, int y) r -> 1; + ^^^ + Syntax error on token "int", invalid ( + ---------- + 3. ERROR in X.java (at line 4) + case Rectangle(int x, int y) r -> 1; + ^ + Syntax error, insert ")" to complete MethodInvocation + ---------- + 4. ERROR in X.java (at line 4) + case Rectangle(int x, int y) r -> 1; + ^ + Syntax error, insert ":" to complete SwitchLabel + ---------- + """); } public void testRecordPatternTypeInference_001() { runNegativeTest(new String[] { diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java index 8afddd00062..72118e61d2f 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java @@ -252,17 +252,19 @@ public void testBug573516_005() { "}\n"+ "class Y {}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer t, String s, X x : System.out.println(\"Integer, String or X\");\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 10)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer t, String s, X x : System.out.println("Integer, String or X"); + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Case labels with a named pattern variable must have only one pattern + ---------- + 2. ERROR in X.java (at line 10) + Zork(); + ^^^^ + The method Zork() is undefined for the type X + ---------- + """); } public void testBug573516_006() { runNegativeTest( @@ -282,22 +284,39 @@ public void testBug573516_006() { "}\n"+ "class Y {}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println(\"Integer, String or X\");\n" + - " ^^^^^^^^^\n" - + "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println(\"Integer, String or X\");\n" + - " ^^^^^^\n" + - "length cannot be resolved or is not a field\n" + - "----------\n" + - "3. ERROR in X.java (at line 10)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println("Integer, String or X"); + ^^^^ + Syntax error on token "case", BeginCaseElement expected after this token + ---------- + 2. ERROR in X.java (at line 4) + case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println("Integer, String or X"); + ^^^^ + Syntax error on token "when", RestrictedIdentifierWhen expected + ---------- + 3. ERROR in X.java (at line 4) + case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println("Integer, String or X"); + ^ + Syntax error on token ",", : expected + ---------- + 4. ERROR in X.java (at line 4) + case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println("Integer, String or X"); + ^^^^ + Syntax error on token "when", = expected + ---------- + 5. ERROR in X.java (at line 4) + case Integer t, String s when s.length > 0, X x when x.hashCode() > 10 : System.out.println("Integer, String or X"); + ^ + Syntax error on token ":", ; expected + ---------- + 6. ERROR in X.java (at line 10) + Zork(); + ^^^^ + The method Zork() is undefined for the type X + ---------- + """); } public void testBug573516_007() { runNegativeTest( @@ -317,22 +336,19 @@ public void testBug573516_007() { "}\n"+ "class Y {}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer t, String : System.out.println(\"Error should be flagged for String\");\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case Integer t, String : System.out.println(\"Error should be flagged for String\");\n" + - " ^^^^^^\n" + - "String cannot be resolved to a variable\n" + - "----------\n" + - "3. ERROR in X.java (at line 10)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer t, String : System.out.println("Error should be flagged for String"); + ^ + Syntax error on token "t", delete this token + ---------- + 2. ERROR in X.java (at line 10) + Zork(); + ^^^^ + The method Zork() is undefined for the type X + ---------- + """); } public void testBug573516_008() { runNegativeTest( @@ -352,27 +368,19 @@ public void testBug573516_008() { "}\n"+ "class Y {}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer t, String : System.out.println(\"Error should be flagged for Integer and String\");\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case Integer t, String : System.out.println(\"Error should be flagged for Integer and String\");\n" + - " ^^^^^^^^^\n" + - "Type mismatch: cannot convert from int to Integer\n" + - "----------\n" + - "3. ERROR in X.java (at line 4)\n" + - " case Integer t, String : System.out.println(\"Error should be flagged for Integer and String\");\n" + - " ^^^^^^\n" + - "String cannot be resolved to a variable\n" + - "----------\n" + - "4. ERROR in X.java (at line 10)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer t, String : System.out.println("Error should be flagged for Integer and String"); + ^ + Syntax error on token "t", delete this token + ---------- + 2. ERROR in X.java (at line 10) + Zork(); + ^^^^ + The method Zork() is undefined for the type X + ---------- + """); } public void testBug573516_009() { runNegativeTest( @@ -427,22 +435,19 @@ public void testBug573516_010() { "}\n"+ "class Y {}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case String s, default : System.out.println(\"Error should be flagged for String and default\");\n" + - " ^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case String s, default : System.out.println(\"Error should be flagged for String and default\");\n" + - " ^^^^^^^^\n" + - "Type mismatch: cannot convert from int to String\n" + - "----------\n" + - "3. ERROR in X.java (at line 10)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case String s, default : System.out.println("Error should be flagged for String and default"); + ^ + Syntax error on token "s", delete this token + ---------- + 2. ERROR in X.java (at line 10) + Zork(); + ^^^^ + The method Zork() is undefined for the type X + ---------- + """); } public void testBug573516_011() { runNegativeTest( @@ -1624,12 +1629,14 @@ public void testBug574559_001() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 5)\n" + - " case 1, Integer i -> System.out.println(o);\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case 1, Integer i -> System.out.println(o); + ^ + Syntax error on token "i", delete this token + ---------- + """); } public void testBug574559_002() { runNegativeTest( @@ -1644,17 +1651,14 @@ public void testBug574559_002() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 5)\n" + - " case Integer i, 30 -> System.out.println(o);\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 5)\n" + - " case Integer i, 30 -> System.out.println(o);\n" + - " ^^\n" + - "This case label is dominated by one of the preceding case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case Integer i, 30 -> System.out.println(o); + ^ + Syntax error on token "i", delete this token + ---------- + """); } // Test that fall-through to a pattern is not allowed (label statement group has one statement) public void testBug573940_1() { @@ -1852,27 +1856,29 @@ public void testBug574564_002() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case var i, var j, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case var i, var j, var k -> System.out.println(0);\n" + - " ^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "3. ERROR in X.java (at line 7)\n" + - " case var i, var j, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "4. ERROR in X.java (at line 7)\n" + - " case var i, var j, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case var i, var j, var k -> System.out.println(0); + ^^^^^^^^^^^^^^^^^^^^^^^^ + Case labels with a named pattern variable must have only one pattern + ---------- + 2. ERROR in X.java (at line 7) + case var i, var j, var k -> System.out.println(0); + ^^^ + 'var' is not allowed here + ---------- + 3. ERROR in X.java (at line 7) + case var i, var j, var k -> System.out.println(0); + ^^^ + 'var' is not allowed here + ---------- + 4. ERROR in X.java (at line 7) + case var i, var j, var k -> System.out.println(0); + ^^^ + 'var' is not allowed here + ---------- + """); } public void testBug574564_003() { runNegativeTest( @@ -1890,17 +1896,14 @@ public void testBug574564_003() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case var i, 10 -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case var i, 10 -> System.out.println(0);\n" + - " ^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case var i, 10 -> System.out.println(0); + ^ + Syntax error on token "i", delete this token + ---------- + """); } public void testBug574564_004() { runNegativeTest( @@ -1918,22 +1921,19 @@ public void testBug574564_004() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case var i, 10, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case var i, 10, var k -> System.out.println(0);\n" + - " ^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "3. ERROR in X.java (at line 7)\n" + - " case var i, 10, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case var i, 10, var k -> System.out.println(0); + ^ + Syntax error on token "i", delete this token + ---------- + 2. ERROR in X.java (at line 7) + case var i, 10, var k -> System.out.println(0); + ^ + Syntax error on token "k", delete this token + ---------- + """); } public void testBug574564_005() { runNegativeTest( @@ -1951,17 +1951,14 @@ public void testBug574564_005() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case 10, null, var k -> System.out.println(0);\n" + - " ^^^^\n" + - "A null case label has to be either the only expression in a case label or the first expression followed only by a default\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case 10, null, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case 10, null, var k -> System.out.println(0); + ^ + Syntax error on token "k", delete this token + ---------- + """); } public void testBug574564_006() { runNegativeTest( @@ -1979,27 +1976,14 @@ public void testBug574564_006() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case default, var k -> System.out.println(0);\n" + - " ^^^^^^^\n" + - "A \'default\' can occur after \'case\' only as a second case label expression and that too only if \'null\' precedes in \'case null, default\' \n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case default, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "3. ERROR in X.java (at line 7)\n" + - " case default, var k -> System.out.println(0);\n" + - " ^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "4. ERROR in X.java (at line 8)\n" + - " default -> System.out.println(o);\n" + - " ^^^^^^^\n" + - "The default case is already defined\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case default, var k -> System.out.println(0); + ^ + Syntax error on token "k", delete this token + ---------- + """); } public void testBug574564_007() { runNegativeTest( @@ -2017,37 +2001,14 @@ public void testBug574564_007() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case default, default, var k -> System.out.println(0);\n" + - " ^^^^^^^\n" + - "A \'default\' can occur after \'case\' only as a second case label expression and that too only if \'null\' precedes in \'case null, default\' \n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case default, default, var k -> System.out.println(0);\n" + - " ^^^^^^^\n" + - "The default case is already defined\n" + - "----------\n" + - "3. ERROR in X.java (at line 7)\n" + - " case default, default, var k -> System.out.println(0);\n" + - " ^^^^^^^\n" + - "A \'default\' can occur after \'case\' only as a second case label expression and that too only if \'null\' precedes in \'case null, default\' \n" + - "----------\n" + - "4. ERROR in X.java (at line 7)\n" + - " case default, default, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "5. ERROR in X.java (at line 7)\n" + - " case default, default, var k -> System.out.println(0);\n" + - " ^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "6. ERROR in X.java (at line 8)\n" + - " default -> System.out.println(o);\n" + - " ^^^^^^^\n" + - "The default case is already defined\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case default, default, var k -> System.out.println(0); + ^ + Syntax error on token "k", delete this token + ---------- + """); } public void testBug574564_008() { runNegativeTest( @@ -2065,27 +2026,14 @@ public void testBug574564_008() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 7)\n" + - " case default, 1, var k -> System.out.println(0);\n" + - " ^^^^^^^\n" + - "A \'default\' can occur after \'case\' only as a second case label expression and that too only if \'null\' precedes in \'case null, default\' \n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case default, 1, var k -> System.out.println(0);\n" + - " ^^^\n" + - "\'var\' is not allowed here\n" + - "----------\n" + - "3. ERROR in X.java (at line 7)\n" + - " case default, 1, var k -> System.out.println(0);\n" + - " ^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "4. ERROR in X.java (at line 8)\n" + - " default -> System.out.println(o);\n" + - " ^^^^^^^\n" + - "The default case is already defined\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case default, 1, var k -> System.out.println(0); + ^ + Syntax error on token "k", delete this token + ---------- + """); } public void testBug574564_009() { runNegativeTest( @@ -2099,17 +2047,19 @@ public void testBug574564_009() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 3)\n" + - " switch (o) {\n" + - " ^\n" + - "An enhanced switch statement should be exhaustive; a default label expected\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case String s, default, Integer i -> System.out.println(0);\n" + - " ^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case String s, default, Integer i -> System.out.println(0); + ^ + Syntax error on token "s", delete this token + ---------- + 2. ERROR in X.java (at line 4) + case String s, default, Integer i -> System.out.println(0); + ^ + Syntax error on token "i", delete this token + ---------- + """); } public void testBug574564_010() { Map options = getCompilerOptions(); @@ -2211,17 +2161,19 @@ public void testBug574563_002() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case null, Integer i -> System.out.println(0);\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 9)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case null, Integer i -> System.out.println(0); + ^ + Syntax error on token "i", delete this token + ---------- + 2. ERROR in X.java (at line 9) + Zork(); + ^^^^ + The method Zork() is undefined for the type X + ---------- + """); } public void testBug574563_003() { runNegativeTest( @@ -2237,17 +2189,14 @@ public void testBug574563_003() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer i, null -> System.out.println(0);\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer i, null -> System.out.println(0); + ^ + Syntax error on token "i", delete this token + ---------- + """); } public void testBug574563_004() { runNegativeTest( @@ -2263,17 +2212,34 @@ public void testBug574563_004() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case null, Integer i when i > 10 -> System.out.println(0);\n" + - " ^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case null, Integer i when i > 10 -> System.out.println(0); + ^ + Syntax error on token "i", : expected + ---------- + 2. ERROR in X.java (at line 4) + case null, Integer i when i > 10 -> System.out.println(0); + ^^^^ + Syntax error on token "when", ( expected + ---------- + 3. ERROR in X.java (at line 4) + case null, Integer i when i > 10 -> System.out.println(0); + ^^^^^ + Syntax error on tokens, TypeElidedUnnamedFormalParameter expected instead + ---------- + 4. ERROR in X.java (at line 4) + case null, Integer i when i > 10 -> System.out.println(0); + ^ + Syntax error, insert ")" to complete Expression + ---------- + 5. ERROR in X.java (at line 4) + case null, Integer i when i > 10 -> System.out.println(0); + ^ + Syntax error, insert "AssignmentOperator Expression" to complete Expression + ---------- + """); } public void testBug574563_005() { runNegativeTest( @@ -2289,17 +2255,29 @@ public void testBug574563_005() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer i when i > 10, null -> System.out.println(0);\n" + - " ^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " Zork();\n" + - " ^^^^\n" + - "The method Zork() is undefined for the type X\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer i when i > 10, null -> System.out.println(0); + ^ + Syntax error on token "i", : expected + ---------- + 2. ERROR in X.java (at line 4) + case Integer i when i > 10, null -> System.out.println(0); + ^^^^ + Syntax error on token "when", ( expected after this token + ---------- + 3. ERROR in X.java (at line 4) + case Integer i when i > 10, null -> System.out.println(0); + ^^^^^^^^ + Syntax error on tokens, TypeElidedUnnamedFormalParameter expected instead + ---------- + 4. ERROR in X.java (at line 4) + case Integer i when i > 10, null -> System.out.println(0); + ^ + Syntax error, insert ")" to complete Expression + ---------- + """); } public void testBug575030_01() { this.runConformTest( @@ -3463,17 +3441,14 @@ public void testBug575047_07() { " }\n"+ "}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer j, \"\":\n" + - " ^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case Integer j, \"\":\n" + - " ^^\n" + - "Type mismatch: cannot convert from String to Number\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer j, "": + ^ + Syntax error on token "j", delete this token + ---------- + """); } public void testBug575047_08() { runConformTest( @@ -3901,22 +3876,14 @@ public void testBug575687_1() { "}\n" + "enum Color { Blue, Red; }\n", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer i2, 4.5:\n" + - " ^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 4)\n" + - " case Integer i2, 4.5:\n" + - " ^^^\n" + - "Type mismatch: cannot convert from double to Number\n" + - "----------\n" + - "3. ERROR in X.java (at line 5)\n" + - " case 4.3: System.out.println();\n" + - " ^^^\n" + - "Type mismatch: cannot convert from double to Number\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 4) + case Integer i2, 4.5: + ^^ + Syntax error on token "i2", delete this token + ---------- + """); } public void testBug575686_1() { runNegativeTest( @@ -3938,47 +3905,19 @@ public void testBug575686_1() { "}\n" + "enum Color { Blue, Red; }\n", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " case Integer i1, String s1 ->\n" + - " ^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "2. ERROR in X.java (at line 7)\n" + - " case Number n, null ->\n" + - " ^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "3. ERROR in X.java (at line 7)\n" + - " case Number n, null ->\n" + - " ^^^^^^^^\n" + - "This case label is dominated by one of the preceding case labels\n" + - "----------\n" + - "4. ERROR in X.java (at line 7)\n" + - " case Number n, null ->\n" + - " ^^^^\n" + - "Duplicate case\n" + - "----------\n" + - "5. ERROR in X.java (at line 9)\n" + - " case null, Class c ->\n" + - " ^^^^\n" + - "Duplicate case\n" + - "----------\n" + - "6. WARNING in X.java (at line 9)\n" + - " case null, Class c ->\n" + - " ^^^^^\n" + - "Class is a raw type. References to generic type Class should be parameterized\n" + - "----------\n" + - "7. ERROR in X.java (at line 9)\n" + - " case null, Class c ->\n" + - " ^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n" + - "8. ERROR in X.java (at line 9)\n" + - " case null, Class c ->\n" + - " ^^^^^^^\n" + - "This case label is dominated by one of the preceding case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 7) + case Number n, null -> + ^ + Syntax error on token "n", delete this token + ---------- + 2. ERROR in X.java (at line 9) + case null, Class c -> + ^ + Syntax error on token "c", delete this token + ---------- + """); } public void testBug575738_001() { runNegativeTest( @@ -4575,7 +4514,7 @@ public void testBug578553_2() { 5. ERROR in X.java (at line 6) case Long l1 when l1.toString().equals(l1.toString()) -> { ^^^^ - Syntax error on token "when", , expected + Syntax error on token "when", RestrictedIdentifierWhen expected ---------- """); } @@ -4624,7 +4563,7 @@ public void testBug578553_3() { 5. ERROR in X.java (at line 6) case Long l1 when l.toString().equals(l1.toString()) -> { ^^^^ - Syntax error on token "when", , expected + Syntax error on token "when", RestrictedIdentifierWhen expected ---------- """); } @@ -6712,12 +6651,34 @@ public void testIssue1351_7() { + " }\n" + "}", }, - "----------\n" + - "1. ERROR in X.java (at line 5)\n" + - " case Byte p when p.equals(exp), (byte) 0 -> {\n" + - " ^^^^^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), (byte) 0 -> { + ^ + Syntax error on token "p", : expected + ---------- + 2. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), (byte) 0 -> { + ^^^^ + Syntax error on token "when", ( expected after this token + ---------- + 3. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), (byte) 0 -> { + ^^^^ + Syntax error on tokens, TypeElidedUnnamedFormalParameter expected instead + ---------- + 4. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ")" to complete MethodInvocation + ---------- + 5. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ";" to complete BlockStatements + ---------- + """); } public void testIssue1351_8() { runNegativeTest( @@ -6737,12 +6698,34 @@ public void testIssue1351_8() { + " }\n" + "}", }, - "----------\n" + - "1. ERROR in X.java (at line 5)\n" + - " case (byte) 0, Byte p when p.equals(exp) -> {\n" + - " ^^^^^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case (byte) 0, Byte p when p.equals(exp) -> { + ^ + Syntax error on token "p", : expected + ---------- + 2. ERROR in X.java (at line 5) + case (byte) 0, Byte p when p.equals(exp) -> { + ^ + Syntax error on token ".", ; expected + ---------- + 3. ERROR in X.java (at line 5) + case (byte) 0, Byte p when p.equals(exp) -> { + ^^^^ + Syntax error on tokens, delete these tokens + ---------- + 4. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ")" to complete MethodInvocation + ---------- + 5. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ";" to complete Statement + ---------- + """); } public void testIssue1351_9() { runNegativeTest( @@ -6762,12 +6745,34 @@ public void testIssue1351_9() { + " }\n" + "}", }, - "----------\n" + - "1. ERROR in X.java (at line 5)\n" + - " case (byte) 0, (byte) 10, Byte p when p.equals(exp) -> {\n" + - " ^^^^^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case (byte) 0, (byte) 10, Byte p when p.equals(exp) -> { + ^ + Syntax error on token "p", : expected + ---------- + 2. ERROR in X.java (at line 5) + case (byte) 0, (byte) 10, Byte p when p.equals(exp) -> { + ^ + Syntax error on token ".", ; expected + ---------- + 3. ERROR in X.java (at line 5) + case (byte) 0, (byte) 10, Byte p when p.equals(exp) -> { + ^^^^ + Syntax error on tokens, delete these tokens + ---------- + 4. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ")" to complete MethodInvocation + ---------- + 5. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ";" to complete Statement + ---------- + """); } public void testIssue1351_10() { runNegativeTest( @@ -6787,12 +6792,34 @@ public void testIssue1351_10() { + " }\n" + "}", }, - "----------\n" + - "1. ERROR in X.java (at line 5)\n" + - " case Byte p when p.equals(exp), null -> {\n" + - " ^^^^^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), null -> { + ^ + Syntax error on token "p", : expected + ---------- + 2. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), null -> { + ^^^^ + Syntax error on token "when", ( expected after this token + ---------- + 3. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), null -> { + ^^^^^^^ + Syntax error on tokens, TypeElidedUnnamedFormalParameter expected instead + ---------- + 4. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ")" to complete MethodInvocation + ---------- + 5. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ";" to complete BlockStatements + ---------- + """); } public void testIssue1351_11() { runNegativeTest( @@ -6811,17 +6838,29 @@ public void testIssue1351_11() { + " }\n" + "}", }, - "----------\n" + - "1. ERROR in X.java (at line 4)\n" + - " switch (exp) {\n" + - " ^^^\n" + - "An enhanced switch statement should be exhaustive; a default label expected\n" + - "----------\n" + - "2. ERROR in X.java (at line 5)\n" + - " case Byte p when p.equals(exp), default -> {\n" + - " ^^^^^^^^^^^^^^^^^^^^^^^^^\n" + - "Cannot mix pattern with other case labels\n" + - "----------\n"); + """ + ---------- + 1. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), default -> { + ^ + Syntax error on token "p", : expected + ---------- + 2. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), default -> { + ^^^^ + Syntax error on token "when", case expected + ---------- + 3. ERROR in X.java (at line 5) + case Byte p when p.equals(exp), default -> { + ^^^^^^^^^^^^^^^^^^^^^^^^^ + Syntax error on tokens, TypeElidedUnnamedFormalParameter expected instead + ---------- + 4. ERROR in X.java (at line 8) + } + ^ + Syntax error, insert ":" to complete SwitchLabel + ---------- + """); } public void testDisambiguatedRestrictedIdentifierWhenAsFirstMethodInvokation() { diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java index 53df77fa9e1..ade058228ed 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java @@ -24,7 +24,7 @@ import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import junit.framework.Test; + import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceDescription; import org.eclipse.core.resources.IWorkspaceRoot; @@ -50,6 +50,8 @@ import org.eclipse.jface.text.Region; import org.eclipse.text.edits.TextEdit; +import junit.framework.Test; + @SuppressWarnings({"rawtypes", "unchecked"}) public class FormatterRegressionTests extends AbstractJavaModelTests { @@ -15960,11 +15962,51 @@ public void testBug573949() { " }\n" + "}\n" + "}"; + formatSource(source, + "public class X {\n" + + " private static void foo(Object o) {\n" + + " switch (o) {\n" + + " case Integer t, String : System.out.println(\"Error should be flagged for Integer and String\");\n" + + " default : System.out.println(\"Object\");\n" + + " }\n" + + " }\n" + + "\n" + + " static void testTriangle(Shape s) {\n" + + " switch (s) {\n" + + " case Triangle t when t.calculateArea() > 100 -> System.out.println(\"Large triangle\");\n" + + " default -> System.out.println(\"A shape, possibly a small triangle\");\n" + + " }\n" + + " }\n" + + "}" + ); +} + +public void testBug573949_0() { + setComplianceLevel(CompilerOptions.VERSION_21); + this.formatterOptions.put(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED); + String source = + "public class X {\n" + + " private static void foo(Object o) {\n" + + " switch (o) {\n" + + " case Integer t, String s : System.out.println(\"Error should be flagged for Integer and String\");\n" + + " default : System.out.println(\"Object\");\n" + + " }\n" + + " }\n" + + "\n" + + "static void testTriangle(Shape s) {\n" + + " switch (s) {\n" + + " case Triangle t when t.calculateArea() > 100 ->\n" + + " System.out.println(\"Large triangle\");\n" + + " default ->\n" + + " System.out.println(\"A shape, possibly a small triangle\");\n" + + " }\n" + + "}\n" + + "}"; formatSource(source, "public class X {\n" + " private static void foo(Object o) {\n" + " switch (o) {\n" + - " case Integer t, String:\n" + + " case Integer t, String s:\n" + " System.out.println(\"Error should be flagged for Integer and String\");\n" + " default:\n" + " System.out.println(\"Object\");\n" + diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTestsForRecordPattern.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTestsForRecordPattern.java index 72921c89f9e..8aa346ec010 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTestsForRecordPattern.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTestsForRecordPattern.java @@ -52,7 +52,7 @@ public void test001() throws JavaModelException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(ColoredPoint(Point(int x, int y), Color c),\n" - + " ColoredPoint lr) r1 -> {\n" + + " ColoredPoint lr) -> {\n" + " yield 1; \n" + " } \n" + " default -> 0;\n" @@ -89,7 +89,7 @@ public void test002() throws JavaModelException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case /*here*/ Rectangl (ColoredPoint(Point(int x, int y), Color c),\n" - + " ColoredPoint lr) r1 -> {\n" + + " ColoredPoint lr) -> {\n" + " yield 1; \n" + " } \n" + " default -> 0;\n" @@ -111,7 +111,7 @@ public void test002() throws JavaModelException { String completeBehind = "/*here*/ Rectangl"; int cursorLocation = str.indexOf(completeBehind) + completeBehind.length(); this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner); - assertResults("Rectangle[TYPE_REF]{Rectangle, , LRectangle;, null, null, 52}", + assertResults("Rectangle[TYPE_REF]{Rectangle, , LRectangle;, null, null, 82}", requestor.getResults()); } @@ -125,7 +125,7 @@ public void test003() throws JavaModelException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(/*here*/ ColoredPoin(Point(int x, int y), Color c),\n" - + " ColoredPoint lr) r1 -> {\n" + + " ColoredPoint lr) -> {\n" + " yield 1; \n" + " } \n" + " default -> 0;\n" @@ -161,7 +161,7 @@ public void test004() throws JavaModelException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(ColoredPoint(/*here*/ Poin(int x, int y), Color c),\n" - + " ColoredPoint lr) r1 -> {\n" + + " ColoredPoint lr) -> {\n" + " yield 1; \n" + " } \n" + " default -> 0;\n" @@ -197,7 +197,7 @@ public void test005() throws JavaModelException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(ColoredPoint( Point(int x, int y), /*here*/ Colo c),\n" - + " ColoredPoint lr) r1 -> {\n" + + " ColoredPoint lr) -> {\n" + " yield 1; \n" + " } \n" + " default -> 0;\n" diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs19Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs19Tests.java index bfae6b3f338..efc3d22c43f 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs19Tests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs19Tests.java @@ -458,7 +458,7 @@ public void testIssue215_008() throws CoreException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(ColoredPoint(Point(int xyz, int y), Color c1),\n" - + " ColoredPoint lr) r11 -> {\n" + + " ColoredPoint lr) -> {\n" + " System.out.println(c1);\n" + " yield 1; \n" + " } \n" @@ -506,7 +506,7 @@ public void testIssue215_009() throws CoreException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(ColoredPoint(Point(int xyz, int y), Color c1),\n" - + " ColoredPoint lr) r11 -> {\n" + + " ColoredPoint lr) -> {\n" + " System.out.println(c1);\n" + " yield 1; \n" + " } \n" @@ -557,7 +557,7 @@ public void testIssue215_010() throws CoreException { + " public static void printLowerRight(Rectangle r) {\n" + " int res = switch(r) {\n" + " case Rectangle(ColoredPoint(Point(int xyz, int y), Color c1),\n" - + " ColoredPoint lr) r11 -> {\n" + + " ColoredPoint lr) -> {\n" + " System.out.println(c1);\n" + " yield 1; \n" + " } \n" diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs21Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs21Tests.java new file mode 100644 index 00000000000..4704f3745b4 --- /dev/null +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs21Tests.java @@ -0,0 +1,169 @@ +package org.eclipse.jdt.core.tests.model; + +import java.io.IOException; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.ILocalVariable; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.core.WorkingCopyOwner; +import org.eclipse.jdt.core.search.IJavaSearchScope; +import org.eclipse.jdt.core.search.ReferenceMatch; +import org.eclipse.jdt.core.search.SearchEngine; +import org.eclipse.jdt.core.search.SearchMatch; +import org.eclipse.jdt.core.search.TypeReferenceMatch; + +import junit.framework.Test; + +public class JavaSearchBugs21Tests extends AbstractJavaSearchTests { + + public JavaSearchBugs21Tests(String name) { + super(name); + this.endChar = ""; + } + + public static Test suite() { + return buildModelTestSuite(JavaSearchBugs21Tests.class, BYTECODE_DECLARATION_ORDER); + } + + class TestCollector extends JavaSearchResultCollector { + public void acceptSearchMatch(SearchMatch searchMatch) throws CoreException { + super.acceptSearchMatch(searchMatch); + } + } + + class ReferenceCollector extends JavaSearchResultCollector { + protected void writeLine() throws CoreException { + super.writeLine(); + ReferenceMatch refMatch = (ReferenceMatch) this.match; + IJavaElement localElement = refMatch.getLocalElement(); + if (localElement != null) { + this.line.append("+["); + if (localElement.getElementType() == IJavaElement.ANNOTATION) { + this.line.append('@'); + this.line.append(localElement.getElementName()); + this.line.append(" on "); + this.line.append(localElement.getParent().getElementName()); + } else { + this.line.append(localElement.getElementName()); + } + this.line.append(']'); + } + } + } + + class TypeReferenceCollector extends ReferenceCollector { + protected void writeLine() throws CoreException { + super.writeLine(); + TypeReferenceMatch typeRefMatch = (TypeReferenceMatch) this.match; + IJavaElement[] others = typeRefMatch.getOtherElements(); + int length = others == null ? 0 : others.length; + if (length > 0) { + this.line.append("+["); + for (int i = 0; i < length; i++) { + IJavaElement other = others[i]; + if (i > 0) + this.line.append(','); + if (other.getElementType() == IJavaElement.ANNOTATION) { + this.line.append('@'); + this.line.append(other.getElementName()); + this.line.append(" on "); + this.line.append(other.getParent().getElementName()); + } else { + this.line.append(other.getElementName()); + } + } + this.line.append(']'); + } + } + } + + protected IJavaProject setUpJavaProject(final String projectName, String compliance, boolean useFullJCL) + throws CoreException, IOException { + // copy files in project from source workspace to target workspace + IJavaProject setUpJavaProject = super.setUpJavaProject(projectName, compliance, useFullJCL); + return setUpJavaProject; + } + + IJavaSearchScope getJavaSearchScope() { + return SearchEngine.createJavaSearchScope(new IJavaProject[] { getJavaProject("JavaSearchBugs") }); + } + + IJavaSearchScope getJavaSearchScopeBugs(String packageName, boolean addSubpackages) throws JavaModelException { + if (packageName == null) + return getJavaSearchScope(); + return getJavaSearchPackageScope("JavaSearchBugs", packageName, addSubpackages); + } + + public ICompilationUnit getWorkingCopy(String path, String source) throws JavaModelException { + if (this.wcOwner == null) { + this.wcOwner = new WorkingCopyOwner() { + }; + } + return getWorkingCopy(path, source, this.wcOwner); + } + + @Override + public void setUpSuite() throws Exception { + super.setUpSuite(); + JAVA_PROJECT = setUpJavaProject("JavaSearchBugs", "21"); + } + + public void tearDownSuite() throws Exception { + deleteProject("JavaSearchBugs"); + super.tearDownSuite(); + } + + protected void setUp() throws Exception { + super.setUp(); + this.resultCollector = new TestCollector(); + this.resultCollector.showAccuracy(true); + } + + public void testListOfPatterns() throws CoreException { + this.workingCopies = new ICompilationUnit[1]; + this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java", + """ + public class X { + public void myMethod() { + MyTokenSearchRecord value = new MyTokenSearchRecord(1, new ClazzB()); + switch (value) { + case MyTokenSearchRecord(int num1, ClazzA aaa), MyTokenSearchRecord(int num2, ClazzB bbb) when 0 == 0 && /*here*/num1 < num2: + System.out.println("Hello, World"); + break; + default: + break; + } + } + } + + record MyTokenSearchRecord(int i, Clazz j) {} + abstract sealed class Clazz permits ClazzA, ClazzB, ClazzC {} + final class ClazzA extends Clazz {} + final class ClazzB extends Clazz {} + final class ClazzC extends Clazz {} + """ + ); + IJavaProject javaProject = this.workingCopies[0].getJavaProject(); // assuming single project for all + // working copies + String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true); + try { + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.DISABLED); + String str = this.workingCopies[0].getSource(); + String selection = "/*here*/num1"; + int start = str.indexOf(selection); + int length = selection.length(); + IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length); + assertEquals("incorrect no of elements", 1, elements.length); + assertTrue(elements[0] instanceof ILocalVariable); + search(elements[0], REFERENCES, EXACT_RULE); + assertSearchResults("src/X.java void X.myMethod() [num1] EXACT_MATCH"); + } finally { + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old); + } + } + +} diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunJavaSearchTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunJavaSearchTests.java index 88ee879ce6b..b5f92533646 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunJavaSearchTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunJavaSearchTests.java @@ -13,9 +13,10 @@ *******************************************************************************/ package org.eclipse.jdt.core.tests.model; -import java.lang.reflect.*; -import java.util.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.List; import org.eclipse.jdt.core.tests.junit.extension.TestCase; @@ -71,6 +72,7 @@ public static Test suite() { allClasses.add(JavaSearchBugs16Tests.class); allClasses.add(JavaSearchBugs17Tests.class); allClasses.add(JavaSearchBugs19Tests.class); + allClasses.add(JavaSearchBugs21Tests.class); allClasses.add(JavaSearchMultipleProjectsTests.class); allClasses.add(SearchTests.class); allClasses.add(JavaSearchScopeTests.class); diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchPatternTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchPatternTest.java index b2a1530b1ae..e80f905105a 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchPatternTest.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchPatternTest.java @@ -1126,7 +1126,7 @@ public void testNPEinASTRewriteFlattener() throws Exception { buf1.append("public class X {\n"); buf1.append( "void foo(Object o) {\n"); buf1.append( " switch (o) {\n"); - buf1.append( " case null when null:\n"); + buf1.append( " case when null:\n"); buf1.append( " System.out.println(\"Greater than 10\");\n"); buf1.append( " default : System.out.println(\"0\");\n"); buf1.append( " }\n"); diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java index 90c05de148a..4c6a50e388d 100644 --- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java +++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/select/SelectionParser.java @@ -187,6 +187,9 @@ private void buildMoreCompletionContext(Expression expression) { Statement whileBody = null; + boolean hasGuard = false; + int guardPosition = -1; + int kind; for (int i = this.elementPtr; i > -1; i--) { @@ -206,13 +209,24 @@ private void buildMoreCompletionContext(Expression expression) { thenStat = elseStat = null; break; case K_BETWEEN_CASE_AND_COLONORARROW: + if (hasGuard) { + int patternListLength = 0; + this.expressionPtr = guardPosition; + while (this.expressionStack[this.expressionPtr] instanceof Pattern) { + patternListLength++; + this.expressionPtr--; + } + Pattern[] patterns = new Pattern[patternListLength]; + System.arraycopy(this.expressionStack, this.expressionPtr + 1, patterns, 0, patternListLength); + parentNode = orphan = new GuardedPattern(patterns, (Expression) orphan); + } parentNode = orphan = new CaseStatement((Expression) orphan, orphan.sourceStart, orphan.sourceEnd); break; case K_INSIDE_WHEN: - if (this.astPtr >=0 && this.astStack[this.astPtr] instanceof Pattern && orphan instanceof Expression) { - this.astLengthPtr--; - Pattern pattern = (Pattern) this.astStack[this.astPtr--]; - parentNode = orphan = new GuardedPattern(pattern, (Expression) orphan); + hasGuard = true; + guardPosition = this.expressionPtr; + while (guardPosition > 0 && !(this.expressionStack[guardPosition] instanceof Pattern)) { + guardPosition--; } break; case K_POST_WHILE_EXPRESSION: diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java index efdca085207..75babd4aba2 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java @@ -2343,7 +2343,9 @@ public Pattern convert(org.eclipse.jdt.internal.compiler.ast.GuardedPattern patt if (this.resolveBindings) { recordNodes(guardedPattern, pattern); } - guardedPattern.setPattern(convert(pattern.primaryPattern)); + for (org.eclipse.jdt.internal.compiler.ast.Pattern nestedPattern : pattern.patterns) { + guardedPattern.patterns().add(convert(nestedPattern)); + } guardedPattern.setExpression(convert(pattern.condition)); int startPosition = pattern.sourceStart; int sourceEnd = pattern.sourceEnd; diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/GuardedPattern.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/GuardedPattern.java index 46afcaa8ab8..74acb58b8ab 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/GuardedPattern.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/GuardedPattern.java @@ -42,7 +42,9 @@ public class GuardedPattern extends Pattern{ /** * The "pattern" structural property of this node type (child type: {@link Pattern}). (added in JEP 406). */ - public static final ChildPropertyDescriptor PATTERN_PROPERTY = internalPatternPropertyFactory(GuardedPattern.class); + public static final ChildPropertyDescriptor PATTERN_PROPERTY = internalPatternPropertyFactory(GuardedPattern.class); + + public static final ChildListPropertyDescriptor PATTERNS_PROPERTY = new ChildListPropertyDescriptor(GuardedPattern.class, "patterns", Pattern.class, CYCLE_RISK); //$NON-NLS-1$ /** * The "expression" structural property of this node type (child type: {@link Expression}). (added in JEP 406). @@ -64,23 +66,23 @@ public class GuardedPattern extends Pattern{ private static final List PROPERTY_DESCRIPTORS; static { - List propertyList = new ArrayList(3); + List propertyList = new ArrayList(4); createPropertyList(GuardedPattern.class, propertyList); - addProperty(PATTERN_PROPERTY, propertyList); + addProperty(PATTERNS_PROPERTY, propertyList); addProperty(EXPRESSION_PROPERTY, propertyList); PROPERTY_DESCRIPTORS = reapPropertyList(propertyList); } /** - * The pattern; null for none + * The patterns */ - private Pattern pattern = null; + private final ASTNode.NodeList patterns = new ASTNode.NodeList(PATTERNS_PROPERTY); /** * The expression; null for none; lazily initialized (but * does not default to none). */ - private Expression conditonalExpression = null; + private Expression conditionalExpression = null; @@ -106,7 +108,7 @@ final ASTNode internalGetSetChildProperty(ChildPropertyDescriptor property, bool if (get) { return getPattern(); } else { - setPattern((Pattern)child); + setPattern((Pattern) child); return null; } } @@ -114,6 +116,15 @@ final ASTNode internalGetSetChildProperty(ChildPropertyDescriptor property, bool return super.internalGetSetChildProperty(property, get, child); } + @Override + final List internalGetChildListProperty(ChildListPropertyDescriptor property) { + if (property == PATTERNS_PROPERTY) { + return patterns(); + } + // allow default implementation to flag the error + return super.internalGetChildListProperty(property); + } + @Override int getNodeType0() { return GUARDED_PATTERN; @@ -128,7 +139,8 @@ boolean subtreeMatch0(ASTMatcher matcher, Object other) { ASTNode clone0(AST target) { GuardedPattern result = new GuardedPattern(target); result.setSourceRange(getStartPosition(), getLength()); - result.setPattern((Pattern) getPattern().clone(target)); + result.patterns.addAll( + ASTNode.copySubtrees(target, patterns())); result.setExpression((Expression) getExpression().clone(target)); result.setRestrictedIdentifierStartPosition(this.restrictedIdentifierStartPosition); return result; @@ -139,11 +151,10 @@ void accept0(ASTVisitor visitor) { boolean visitChildren = visitor.visit(this); if (visitChildren) { // visit children in normal left to right reading order - acceptChild(visitor, getPattern()); + acceptChildren(visitor, this.patterns); acceptChild(visitor, getExpression()); } visitor.endVisit(this); - } @Override @@ -153,10 +164,9 @@ int memSize() { @Override int treeSize() { - return - memSize() - + (this.pattern == null ? 0 : getPattern().treeSize()) - + (this.conditonalExpression == null ? 0 : getExpression().treeSize()); + return memSize() + + this.patterns.listSize() + + (this.conditionalExpression == null ? 0 : getExpression().treeSize()); } /** @@ -199,41 +209,49 @@ public static List propertyDescriptors(int apiLevel, boolean previewEnabled) { */ public Expression getExpression() { supportedOnlyIn21(); - if (this.conditonalExpression == null) { + if (this.conditionalExpression == null) { //lazy init must be thread-safe for readers synchronized (this) { - if (this.conditonalExpression == null) { + if (this.conditionalExpression == null) { preLazyInit(); - this.conditonalExpression = this.ast.newNullLiteral(); - postLazyInit(this.pattern, EXPRESSION_PROPERTY); + this.conditionalExpression = this.ast.newNullLiteral(); + postLazyInit(this.conditionalExpression, EXPRESSION_PROPERTY); } } } - return this.conditonalExpression; + return this.conditionalExpression; } /** - * Returns the pattern of this Guarded Pattern, or + * Returns the first pattern of this Guarded Pattern, or * empty if there is none. * @return the pattern node * (element type: {@link Pattern}) * @exception UnsupportedOperationException if this operation is used other than JLS18 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false + * @deprecated use patterns() instead * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature. */ public Pattern getPattern() { supportedOnlyIn21(); - if (this.pattern == null) { - // lazy init must be thread-safe for readers - synchronized (this) { - if (this.pattern == null) { - preLazyInit(); - this.pattern = this.ast.newNullPattern(); - postLazyInit(this.pattern, PATTERN_PROPERTY); - } - } + if (this.patterns.size() == 0) { + return null; } - return this.pattern; + return (Pattern) this.patterns.get(0); + } + + /** + * Returns the patterns of this Guarded Pattern. + * @return the pattern node + * (element type: {@link Pattern}) + * @exception UnsupportedOperationException if this operation is used other than JLS18 + * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false + * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature. + * @since 3.37 + */ + public List patterns() { + supportedOnlyIn21(); + return this.patterns; } /** @@ -251,9 +269,9 @@ public Pattern getPattern() { */ public void setExpression(Expression expression) { supportedOnlyIn21(); - ASTNode oldChild = this.conditonalExpression; + ASTNode oldChild = this.conditionalExpression; preReplaceChild(oldChild, expression, EXPRESSION_PROPERTY); - this.conditonalExpression = expression; + this.conditionalExpression = expression; postReplaceChild(oldChild, expression, EXPRESSION_PROPERTY); } @@ -262,13 +280,15 @@ public void setExpression(Expression expression) { * @noreference This method is not intended to be referenced by clients. * @exception UnsupportedOperationException if this operation is used not for JLS18 * @exception UnsupportedOperationException if this operation is used without previewEnabled + * @deprecated use patterns() and mutate the list instead */ public void setPattern(Pattern pattern) { supportedOnlyIn21(); - ASTNode oldChild = this.pattern; - preReplaceChild(oldChild, pattern, PATTERN_PROPERTY); - this.pattern = pattern; - postReplaceChild(oldChild, pattern, PATTERN_PROPERTY); + if (this.patterns.size() > 0) { + this.patterns.set(0, pattern); + } else { + this.patterns.add(pattern); + } } /** diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java index 826a14d8572..28835f80e36 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java @@ -816,7 +816,9 @@ public boolean visit(ForStatement node) { @Override public boolean visit(GuardedPattern node) { if (DOMASTUtil.isPatternSupported(node.getAST())) { - node.getPattern().accept(this); + for (Object o : node.patterns()) { + ((Pattern)o).accept(this); + } this.buffer.append(" when ");//$NON-NLS-1$ node.getExpression().accept(this); } diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java index f547672bf73..8e38950e1f5 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java @@ -2978,7 +2978,7 @@ public boolean visit(GuardedPattern node) { return doVisitUnchangedChildren(node); } - rewriteRequiredNode(node, GuardedPattern.PATTERN_PROPERTY); + rewriteRequiredNode(node, GuardedPattern.PATTERNS_PROPERTY); rewriteRequiredNode(node, GuardedPattern.EXPRESSION_PROPERTY); return false; diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java index 0a11cf2864c..3261b1d00b4 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java @@ -579,7 +579,9 @@ public boolean visit(ForStatement node) { @Override public boolean visit(GuardedPattern node) { if (DOMASTUtil.isPatternSupported(node.getAST())) { - node.getPattern().accept(this); + for (Object o : node.patterns()) { + ((Pattern)o).accept(this); + } this.result.append(" when ");//$NON-NLS-1$ node.getExpression().accept(this); } From 1fd1a8e0ff769ee501be491d7688675ebca4a67f Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 19 Jan 2024 12:06:27 -0500 Subject: [PATCH 3/3] Code generation for lists of Patterns in case statements Signed-off-by: David Thompson --- .../ast/AbstractVariableDeclaration.java | 1 + .../internal/compiler/ast/CaseStatement.java | 51 ++- .../internal/compiler/ast/GuardedPattern.java | 31 +- .../jdt/internal/compiler/ast/Pattern.java | 28 ++ .../internal/compiler/ast/RecordPattern.java | 6 + .../compiler/ast/SwitchStatement.java | 12 +- .../regression/SwitchPatternTest.java | 1 + .../regression/SwitchPatternTest21.java | 301 ++++++++++++++++++ 8 files changed, 392 insertions(+), 39 deletions(-) create mode 100644 org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest21.java diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/AbstractVariableDeclaration.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/AbstractVariableDeclaration.java index ddd700a7007..50f8e1a793d 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/AbstractVariableDeclaration.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/AbstractVariableDeclaration.java @@ -156,4 +156,5 @@ public boolean isUnnamed(BlockScope scope) { && scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK21 && scope.compilerOptions().enablePreviewFeatures; } + } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java index 69b8442659d..01df029ef18 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java @@ -81,7 +81,8 @@ public FlowInfo analyseCode( local.useFlag = LocalVariableBinding.USED; // these are structurally required even if not touched } nullPatternCount += e instanceof NullLiteral ? 1 : 0; - if (i > 0 && (e instanceof Pattern)) { + if (i > 0 && (e instanceof Pattern) + && (currentScope.compilerOptions().sourceLevel < ClassFileConstants.JDK21 || !currentScope.compilerOptions().enablePreviewFeatures)) { if (!(i == nullPatternCount && e instanceof TypePattern)) currentScope.problemReporter().IllegalFallThroughToPattern(e); } @@ -172,14 +173,28 @@ public void generateCode(BlockScope currentScope, CodeStream codeStream) { private void casePatternExpressionGenerateCode(BlockScope currentScope, CodeStream codeStream) { if (this.patternIndex != -1) { - Pattern pattern = ((Pattern) this.constantExpressions[this.patternIndex]); - if (containsPatternVariable()) { + BranchLabel thenTarget = new BranchLabel(codeStream); + for (int i = 0; i < this.constantExpressions.length - 1; i++) { + Pattern pattern = ((Pattern)this.constantExpressions[i]); + pattern.thenTarget = thenTarget; LocalVariableBinding local = currentScope.findVariable(SwitchStatement.SecretPatternVariableName, null); codeStream.load(local); pattern.generateCode(currentScope, codeStream); + pattern.fullWrapupGeneration(codeStream); + codeStream.goto_(pattern.thenTarget); + pattern.elseTarget.place(); + } + Pattern pattern = ((Pattern)this.constantExpressions[this.constantExpressions.length - 1]); + pattern.thenTarget = thenTarget; + LocalVariableBinding local = currentScope.findVariable(SwitchStatement.SecretPatternVariableName, null); + codeStream.load(local); + pattern.generateCode(currentScope, codeStream); + if (pattern.countNamedVariables(currentScope) > 0) { + pattern.wrapupGeneration(codeStream); } else { - pattern.setTargets(codeStream); + pattern.fullWrapupGeneration(codeStream); } + pattern.setTargets(codeStream); if (!(pattern instanceof GuardedPattern)) codeStream.goto_(pattern.thenTarget); @@ -261,9 +276,11 @@ private Expression getFirstValidExpression(BlockScope scope, SwitchStatement swi scope.problemReporter().validateJavaFeatureSupport(JavaFeature.PATTERN_MATCHING_IN_SWITCH, e.sourceStart, e.sourceEnd); if (this.constantExpressions.length > 1 || e instanceof GuardedPattern gp && gp.patterns.length > 1) { - PatternVariableCounter myVisitor = new PatternVariableCounter(); - this.traverse(myVisitor, scope); - if (myVisitor.numVars > 0) { + int count = 0; + for (Expression expr : this.constantExpressions) { + count += ((Pattern)expr).countNamedVariables(scope); + } + if (count > 0) { scope.problemReporter().illegalCaseLabelWithMultiplePatterns(this); } } @@ -547,24 +564,4 @@ public LocalDeclaration getLocalDeclaration() { return patternVariableIntroduced; } -private class PatternVariableCounter extends ASTVisitor { - - public int numVars = 0; - - @Override - public boolean visit(TypePattern pattern, BlockScope scope) { - if (pattern.local != null && (pattern.local.name.length != 1 || pattern.local.name[0] != '_') && !"\\u005F".equals(pattern.local.name.toString())) { //$NON-NLS-1$ - this.numVars++; - } - return true; - } - - @Override - public boolean visit(RecordPattern pattern, BlockScope scope) { - if (pattern.local != null && (pattern.local.name.length != 1 || pattern.local.name[0] != '_') && !"\\u005F".equals(pattern.local.name.toString())) { //$NON-NLS-1$ - this.numVars++; - } - return true; - } -} } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java index 9d14da29eb2..b17f28ddf67 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/GuardedPattern.java @@ -80,9 +80,29 @@ public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, Fl public void generateOptimizedBoolean(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, BranchLabel falseLabel) { this.thenTarget = new BranchLabel(codeStream); this.elseTarget = new BranchLabel(codeStream); - for (Pattern pattern : this.patterns ) { - pattern.generateOptimizedBoolean(currentScope, codeStream, this.thenTarget, this.elseTarget); + + LocalVariableBinding local = currentScope.findVariable(SwitchStatement.SecretPatternVariableName, null); + BranchLabel toGuard = new BranchLabel(codeStream); + + for (int i = 0; i < this.patterns.length - 1; i++) { + Pattern pattern = this.patterns[i]; + pattern.thenTarget = toGuard; + pattern.generateCode(currentScope, codeStream); + pattern.fullWrapupGeneration(codeStream); + codeStream.goto_(pattern.thenTarget); + pattern.elseTarget.place(); + codeStream.load(local); + } + Pattern pattern = this.patterns[this.patterns.length - 1]; + pattern.thenTarget = toGuard; + pattern.elseTarget = this.elseTarget; + pattern.generateCode(currentScope, codeStream); + if (pattern.countNamedVariables(currentScope) > 0) { + pattern.wrapupGeneration(codeStream); + } else { + pattern.fullWrapupGeneration(codeStream); } + toGuard.place(); Constant cst = this.condition.optimizedBooleanConstant(); setGuardedElseTarget(currentScope, this.elseTarget); @@ -92,6 +112,9 @@ public void generateOptimizedBoolean(BlockScope currentScope, CodeStream codeStr this.thenTarget, null, cst == Constant.NotAConstant); + if (cst != Constant.NotAConstant) { + codeStream.goto_(this.thenTarget); + } if (this.thenInitStateIndex2 != -1) { codeStream.removeNotDefinitelyAssignedVariables(currentScope, this.thenInitStateIndex2); codeStream.addDefinitelyAssignedVariables(currentScope, this.thenInitStateIndex2); @@ -232,9 +255,7 @@ public void wrapupGeneration(CodeStream codeStream) { } @Override public void fullWrapupGeneration(CodeStream codeStream) { - for (Pattern pattern : this.patterns) { - pattern.fullWrapupGeneration(codeStream); - } + this.patterns[0].fullWrapupGeneration(codeStream); } @Override protected void generatePatternVariable(BlockScope currentScope, CodeStream codeStream, BranchLabel trueLabel, diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java index 95ed7d07ee8..f7def6bbcac 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/Pattern.java @@ -116,8 +116,36 @@ public TypeReference getType() { public abstract boolean dominates(Pattern p); + public int countNamedVariables(BlockScope scope) { + var pvc = new PatternVariableCounter(); + this.traverse(pvc, scope); + return pvc.numVars; + } + @Override public StringBuilder print(int indent, StringBuilder output) { return this.printExpression(indent, output); } + + private class PatternVariableCounter extends ASTVisitor { + + public int numVars = 0; + + @Override + public boolean visit(TypePattern pattern, BlockScope scope) { + if (pattern.local != null && (pattern.local.name.length != 1 || pattern.local.name[0] != '_')) { + this.numVars++; + } + return true; + } + + @Override + public boolean visit(RecordPattern pattern, BlockScope scope) { + if (pattern.local != null && (pattern.local.name.length != 1 || pattern.local.name[0] != '_')) { + this.numVars++; + } + return true; + } + + } } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java index 2c996f67566..8e3d2b86dcb 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/RecordPattern.java @@ -214,6 +214,12 @@ public boolean dominates(Pattern p) { return false; } } + } else if (p instanceof GuardedPattern gp) { + for (Pattern gpChild : gp.patterns) { + if (!this.dominates(gpChild)) { + return false; + } + } } return true; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java index f62efa17002..4433f70b377 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java @@ -983,15 +983,13 @@ private void generateCodePatternCaseEpilogue(CodeStream codeStream, int caseInde if (this.switchPatternRestartTarget != null && caseStatement != null && caseStatement.patternIndex != -1 // for null ) { - Pattern pattern = (Pattern) caseStatement.constantExpressions[caseStatement.patternIndex]; - pattern.elseTarget.place(); + Pattern pattern = (Pattern) caseStatement.constantExpressions[caseStatement.constantExpressions.length - 1]; pattern.suspendVariables(codeStream, this.scope); + pattern.elseTarget.place(); caseIndex = this.nullProcessed ? caseIndex - 1 : caseIndex; - if (!pattern.isAlwaysTrue()) { - codeStream.loadInt(caseIndex); - codeStream.store(this.restartIndexLocal, false); - codeStream.goto_(this.switchPatternRestartTarget); - } + codeStream.loadInt(caseIndex); + codeStream.store(this.restartIndexLocal, false); + codeStream.goto_(this.switchPatternRestartTarget); pattern.thenTarget.place(); pattern.resumeVariables(codeStream, this.scope); } else if (this.containsNull && caseStatement != null) { diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java index 72118e61d2f..6b103e56e55 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest.java @@ -7186,6 +7186,7 @@ public static void main(String[] args) { }, "Default"); } + // https://github.com/eclipse-jdt/eclipse.jdt.core/issues/1856 // [switch][record patterns] NPE: Cannot invoke "org.eclipse.jdt.internal.compiler.lookup.MethodBinding.isStatic()" public void testGHI1856() { diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest21.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest21.java new file mode 100644 index 00000000000..1c1c2ad8889 --- /dev/null +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchPatternTest21.java @@ -0,0 +1,301 @@ +package org.eclipse.jdt.core.tests.compiler.regression; + +import java.util.Map; + +import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; +import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; + +import junit.framework.Test; + +public class SwitchPatternTest21 extends AbstractBatchCompilerTest { + + private static String[] JAVAC_OPTIONS = new String[] { "--enable-preview" }; + + public static Test suite() { + return buildMinimalComplianceTestSuite(SwitchPatternTest21.class, F_21); + } + + public SwitchPatternTest21(String name) { + super(name); + } + + @Override + protected Map getCompilerOptions() { + CompilerOptions compilerOptions = new CompilerOptions(super.getCompilerOptions()); + if (compilerOptions.sourceLevel == ClassFileConstants.JDK21) { + compilerOptions.enablePreviewFeatures = true; + } + return compilerOptions.getMap(); + } + + public void runConformTest(String[] files, String expectedOutput) { + super.runConformTest(files, expectedOutput, null, JAVAC_OPTIONS); + } + + public void testListOfPatterns_000() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Melon(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) : System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success"); + } + + public void testListOfPatterns_001() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Chartreuse(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) : System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success"); + } + + public void testListOfPatterns_002() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Licorice(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) : System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "failure"); + } + + public void testListOfPatterns_003() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Melon(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) when 1 == 1 && 2 == 2: System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success"); + } + + public void testListOfPatterns_004() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Chartreuse(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) when 1 == 1 && 2 == 2 : System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success"); + } + + public void testListOfPatterns_005() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Licorice(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) when 1 == 1 && 2 == 2 : System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "failure"); + } + + // next three tests: beat the static analysis so that the `when` clause comparison isn't optimized away + + public void testListOfPatterns_006() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + String myString = "asdf"; + Object o = new Pantaloon(new Melon(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) when myString.length() == 4: System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success"); + } + + public void testListOfPatterns_007() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + String myString = "asdf"; + Object o = new Pantaloon(new Chartreuse(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) when myString.length() == 4: System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success"); + } + + public void testListOfPatterns_008() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + String myString = "asdf"; + Object o = new Pantaloon(new Licorice(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int _), Pantaloon(Melon _, int _) when myString.length() == 4: System.out.println("success"); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "failure"); + } + + public void testTwoCasesWithRecordPatternsShouldNotDominateRegression() { + this.runConformTest( + new String[] { "X.java", + """ + public class X { + + public static void main(String... args) { + Object o = new Pantaloon(new Chartreuse(), 12); + switch (o) { + case Pantaloon(Chartreuse _, int i) when true: System.out.println("success " + i); break; + case Pantaloon(Melon _, int i) when true : System.out.println("success " + i); break; + default: System.out.println("failure"); break; + } + } + + static sealed abstract class Flavour permits Chartreuse, Orange, Licorice, Melon { } + static final class Chartreuse extends Flavour {} + static final class Orange extends Flavour {} + static final class Licorice extends Flavour {} + static final class Melon extends Flavour {} + static record Pantaloon(Flavour flavour, int i) {} + + } + """, }, + "success 12"); + } + +}