Skip to content

Commit 6d3136d

Browse files
vivek-0509romani
authored andcommitted
Issue #18146: Remove ANTLR grammar for discontinued pattern matching preview syntax
1 parent 07fa29e commit 6d3136d

13 files changed

Lines changed: 1001 additions & 1865 deletions

File tree

config/projects-to-test/openjdk17-excluded.files

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,3 +512,32 @@
512512
<module name="BeforeExecutionExclusionFileFilter">
513513
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]switchexpr[\\/]ParserRecovery.java$"/>
514514
</module>
515+
<!-- && guard and parenthesized patterns removed from grammar -->
516+
<module name="BeforeExecutionExclusionFileFilter">
517+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]diags[\\/]examples[\\/]CantRefNonEffectivelyFinalVar.java$"/>
518+
</module>
519+
<module name="BeforeExecutionExclusionFileFilter">
520+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]SwitchErrors.java$"/>
521+
</module>
522+
<module name="BeforeExecutionExclusionFileFilter">
523+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]SimpleAndGuardPattern.java$"/>
524+
</module>
525+
<module name="BeforeExecutionExclusionFileFilter">
526+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Switches.java$"/>
527+
</module>
528+
<module name="BeforeExecutionExclusionFileFilter">
529+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Domination.java$"/>
530+
</module>
531+
<module name="BeforeExecutionExclusionFileFilter">
532+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]GuardsErrors.java$"/>
533+
</module>
534+
<module name="BeforeExecutionExclusionFileFilter">
535+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]EnumTypeChanges.java$"/>
536+
</module>
537+
<module name="BeforeExecutionExclusionFileFilter">
538+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Parenthesized.java$"/>
539+
</module>
540+
<module name="BeforeExecutionExclusionFileFilter">
541+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]RawTypeBindingWarning.java$"/>
542+
</module>
543+

config/projects-to-test/openjdk19-excluded.files

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,3 +557,16 @@
557557
<module name="BeforeExecutionExclusionFileFilter">
558558
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]switchexpr[\\/]ParserRecovery.java$"/>
559559
</module>
560+
<!-- Parenthesized patterns removed from grammar -->
561+
<module name="BeforeExecutionExclusionFileFilter">
562+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Guards.java$"/>
563+
</module>
564+
<module name="BeforeExecutionExclusionFileFilter">
565+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Parenthesized.java$"/>
566+
</module>
567+
<module name="BeforeExecutionExclusionFileFilter">
568+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]RawTypeBindingWarning.java$"/>
569+
</module>
570+
<module name="BeforeExecutionExclusionFileFilter">
571+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Domination.java$"/>
572+
</module>

config/projects-to-test/openjdk20-excluded.files

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,3 +536,23 @@
536536
<module name="BeforeExecutionExclusionFileFilter">
537537
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]switchexpr[\\/]ParserRecovery.java$"/>
538538
</module>
539+
<!-- Parenthesized patterns removed from grammar -->
540+
<module name="BeforeExecutionExclusionFileFilter">
541+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]T8290379.java$"/>
542+
</module>
543+
<module name="BeforeExecutionExclusionFileFilter">
544+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Guards.java$"/>
545+
</module>
546+
<module name="BeforeExecutionExclusionFileFilter">
547+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Parenthesized.java$"/>
548+
</module>
549+
<module name="BeforeExecutionExclusionFileFilter">
550+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]RawTypeBindingWarning.java$"/>
551+
</module>
552+
<module name="BeforeExecutionExclusionFileFilter">
553+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Domination.java$"/>
554+
</module>
555+
<module name="BeforeExecutionExclusionFileFilter">
556+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]DeconstructionDesugaring.java$"/>
557+
</module>
558+

config/projects-to-test/openjdk25-excluded.files

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,3 +742,7 @@
742742
<module name="BeforeExecutionExclusionFileFilter">
743743
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]SuperInit[\\/]EarlyInnerAccessErrorMessageTest.java$"/>
744744
</module>
745+
<!-- Parenthesized patterns removed from grammar -->
746+
<module name="BeforeExecutionExclusionFileFilter">
747+
<property name="fileNamePattern" value="[\\/]test[\\/]langtools[\\/]tools[\\/]javac[\\/]patterns[\\/]Parenthesized.java$"/>
748+
</module>

docs/GRAMMAR_UPDATES.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ guardedPattern
131131
: primaryPattern guard expression
132132
;
133133
134-
// we use the `LAND` token to represent the logical `&&` operator
135-
guard: ( LAND | LITERAL_WHEN );
134+
guard: LITERAL_WHEN;
136135
```
137136

138137
Notes:

src/main/java/com/puppycrawl/tools/checkstyle/JavaAstVisitor.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,16 +1370,7 @@ public DetailAstImpl visitInstanceOfExp(JavaLanguageParser.InstanceOfExpContext
13701370
final DetailAstImpl literalInstanceOf = create(ctx.LITERAL_INSTANCEOF());
13711371
literalInstanceOf.addChild(visit(ctx.expr()));
13721372
final ParseTree patternOrType = ctx.getChild(2);
1373-
1374-
final DetailAstImpl patternDef;
1375-
if (patternOrType instanceof JavaLanguageParser.ParenPatternContext) {
1376-
// Parenthesized pattern has a `PATTERN_DEF` parent
1377-
patternDef = createImaginary(TokenTypes.PATTERN_DEF);
1378-
patternDef.addChild(visit(patternOrType));
1379-
}
1380-
else {
1381-
patternDef = visit(patternOrType);
1382-
}
1373+
final DetailAstImpl patternDef = visit(patternOrType);
13831374
literalInstanceOf.addChild(patternDef);
13841375
return literalInstanceOf;
13851376
}
@@ -1973,15 +1964,13 @@ public DetailAstImpl visitPattern(JavaLanguageParser.PatternContext ctx) {
19731964
final JavaLanguageParser.InnerPatternContext innerPattern = ctx.innerPattern();
19741965
final ParserRuleContext primaryPattern = innerPattern.primaryPattern();
19751966
final ParserRuleContext recordPattern = innerPattern.recordPattern();
1976-
final boolean isSimpleTypePattern = primaryPattern != null
1977-
&& primaryPattern.getChild(0) instanceof JavaLanguageParser.TypePatternContext;
19781967

19791968
final DetailAstImpl pattern;
19801969

19811970
if (recordPattern != null) {
19821971
pattern = visit(recordPattern);
19831972
}
1984-
else if (isSimpleTypePattern) {
1973+
else if (primaryPattern != null) {
19851974
// For simple type pattern like 'Integer i`, we do not add `PATTERN_DEF` parent
19861975
pattern = visit(primaryPattern);
19871976
}
@@ -2005,15 +1994,6 @@ public DetailAstImpl visitGuardedPattern(JavaLanguageParser.GuardedPatternContex
20051994
return guardAstNode;
20061995
}
20071996

2008-
@Override
2009-
public DetailAstImpl visitParenPattern(JavaLanguageParser.ParenPatternContext ctx) {
2010-
final DetailAstImpl lparen = create(ctx.LPAREN());
2011-
final ParseTree innerPattern = ctx.getChild(1);
2012-
lparen.addChild(visit(innerPattern));
2013-
lparen.addChild(create(ctx.RPAREN()));
2014-
return lparen;
2015-
}
2016-
20171997
@Override
20181998
public DetailAstImpl visitRecordPatternDef(JavaLanguageParser.RecordPatternDefContext ctx) {
20191999
return flattenedTree(ctx);

src/main/java/com/puppycrawl/tools/checkstyle/api/TokenTypes.java

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3981,8 +3981,6 @@ public final class TokenTypes {
39813981
* boolean isBuilderReferenceType = text instanceof StringBuilder; // reference type
39823982
* boolean isBuilderPatternWithPattern =
39833983
* text instanceof StringBuilder s; // type pattern, no `PATTERN_DEF`
3984-
* boolean isBuilderEmpty = text instanceof
3985-
* (StringBuilder sb &amp;&amp; sb.isEmpty()); // guarded pattern, `PATTERN_DEF`
39863984
* </pre>
39873985
*
39883986
* <p>parses as:</p>
@@ -4014,31 +4012,6 @@ public final class TokenTypes {
40144012
* | | `--IDENT -&gt; StringBuilder
40154013
* | `--IDENT -&gt; s
40164014
* |--SEMI -&gt; ;
4017-
* |--VARIABLE_DEF -&gt; VARIABLE_DEF
4018-
* | |--MODIFIERS -&gt; MODIFIERS
4019-
* | |--TYPE -&gt; TYPE
4020-
* | | `--LITERAL_BOOLEAN -&gt; boolean
4021-
* | |--IDENT -&gt; isBuilderEmpty
4022-
* | `--ASSIGN -&gt; =
4023-
* | `--EXPR -&gt; EXPR
4024-
* | `--LITERAL_INSTANCEOF -&gt; instanceof
4025-
* | |--IDENT -&gt; text
4026-
* | `--PATTERN_DEF -&gt; PATTERN_DEF
4027-
* | `--LPAREN -&gt; (
4028-
* | |--LAND -&gt; &amp;&amp;
4029-
* | | |--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
4030-
* | | | |--MODIFIERS -&gt; MODIFIERS
4031-
* | | | |--TYPE -&gt; TYPE
4032-
* | | | | `--IDENT -&gt; StringBuilder
4033-
* | | | `--IDENT -&gt; sb
4034-
* | | `--METHOD_CALL -&gt; (
4035-
* | | |--DOT -&gt; .
4036-
* | | | |--IDENT -&gt; sb
4037-
* | | | `--IDENT -&gt; isEmpty
4038-
* | | |--ELIST -&gt; ELIST
4039-
* | | `--RPAREN -&gt; )
4040-
* | `--RPAREN -&gt; )
4041-
* `--SEMI -&gt; ;
40424015
* </pre>
40434016
*
40444017
* @see <a
@@ -4050,7 +4023,6 @@ public final class TokenTypes {
40504023
* @see #DOT
40514024
* @see #TYPE
40524025
* @see #PATTERN_VARIABLE_DEF
4053-
* @see #PATTERN_DEF
40544026
* @see FullIdent
40554027
**/
40564028
public static final int LITERAL_INSTANCEOF =

src/main/resources/com/puppycrawl/tools/checkstyle/grammar/java/JavaLanguageParser.g4

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -879,19 +879,10 @@ guardedPattern
879879
: primaryPattern guard expression
880880
;
881881

882-
/**
883-
* We do not need to enforce what the compiler already does; namely, the '&&' syntax
884-
* in case labels was only supported as a preview feature in JDK18 and will fail compilation
885-
* now. Guarded patterns in expressions still uses '&&', while case labels now use 'when'.
886-
* We can allow both alternatives here, since this will help us to maintain backwards
887-
* compatibility and avoid more alternatives/complexity of maintaining two
888-
* separate pattern grammars for case labels and expressions.
889-
*/
890-
guard: ( LAND | LITERAL_WHEN );
882+
guard: LITERAL_WHEN;
891883

892884
primaryPattern
893885
: typePattern #patternVariableDef
894-
| LPAREN innerPattern RPAREN #parenPattern
895886
| recordPattern #recordPatternDef
896887
;
897888

src/test/java/com/puppycrawl/tools/checkstyle/grammar/antlr4/Java17AstRegressionTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,4 @@ public void testCaseDefault() throws Exception {
7171
verifyAst(getPath("ExpectedAntlr4AstRegressionCaseDefault.txt"),
7272
getPath("InputAntlr4AstRegressionCaseDefault.java"));
7373
}
74-
75-
@Test
76-
public void testNoLongerSupportedByJava() throws Exception {
77-
verifyAst(getNonCompilablePath("ExpectedAntlr4AstRegressionNoLongerSupportedByJava.txt"),
78-
getNonCompilablePath("InputAntlr4AstRegressionNoLongerSupportedByJava.java"));
79-
}
8074
}

0 commit comments

Comments
 (0)