diff --git a/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindAnnotationsTest.java b/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindAnnotationsTest.java index e690611680b..5c906624019 100644 --- a/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindAnnotationsTest.java +++ b/rewrite-java-test/src/test/java/org/openrewrite/java/search/FindAnnotationsTest.java @@ -17,6 +17,8 @@ import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.openrewrite.DocumentExample; import org.openrewrite.Issue; import org.openrewrite.java.JavaParser; @@ -39,7 +41,6 @@ class FindAnnotationsTest implements RewriteTest { @Test void matchMetaAnnotation() { rewriteRun( -// JavaParser.fromJavaVersion().classpath(JavaParser.runtimeClasspath()).logCompilationWarningsAndErrors(true).build(), spec -> spec.recipe(new FindAnnotations("@javax.annotation.Nonnull", true)) .parser(JavaParser.fromJavaVersion().classpath(JavaParser.runtimeClasspath())), java( @@ -94,10 +95,11 @@ public class MyExtension implements Extension {} ); } - @Test - void matchesSimpleFullyQualifiedAnnotation() { + @ParameterizedTest + @ValueSource(strings = {"@java.lang.Deprecated", "java.lang.Deprecated"}) + void matchesSimpleFullyQualifiedAnnotation(String annotationPattern) { rewriteRun( - spec -> spec.recipe(new FindAnnotations("@java.lang.Deprecated", null)), + spec -> spec.recipe(new FindAnnotations(annotationPattern, null)), java( "@Deprecated public class A {}", "/*~~>*/@Deprecated public class A {}" @@ -105,7 +107,6 @@ void matchesSimpleFullyQualifiedAnnotation() { ); } - @Test void matchesWildcard() { rewriteRun( @@ -296,7 +297,7 @@ void findAnnotationWithClassTypeArgument() { java( """ package com.foo; - + @Example(Foo.class) public class Foo {} """, diff --git a/rewrite-java/src/main/antlr/AnnotationSignatureParser.g4 b/rewrite-java/src/main/antlr/AnnotationSignatureParser.g4 index 4edd23e0884..9b203912956 100644 --- a/rewrite-java/src/main/antlr/AnnotationSignatureParser.g4 +++ b/rewrite-java/src/main/antlr/AnnotationSignatureParser.g4 @@ -3,7 +3,7 @@ parser grammar AnnotationSignatureParser; options { tokenVocab=AnnotationSignatureLexer; } annotation - : AT annotationName ( LPAREN ( elementValuePairs | elementValue )? RPAREN )? + : AT? annotationName ( LPAREN ( elementValuePairs | elementValue )? RPAREN )? ; annotationName diff --git a/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.interp b/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.interp index 992392f0c67..29bdb7426ab 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.interp +++ b/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.interp @@ -62,4 +62,4 @@ literal atn: -[4, 1, 22, 77, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 26, 8, 0, 1, 0, 3, 0, 29, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 5, 2, 36, 8, 2, 10, 2, 12, 2, 39, 9, 2, 1, 3, 1, 3, 1, 3, 5, 3, 44, 8, 3, 10, 3, 12, 3, 47, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 7, 1, 7, 1, 7, 5, 7, 62, 8, 7, 10, 7, 12, 7, 65, 9, 7, 1, 8, 1, 8, 1, 8, 5, 8, 70, 8, 8, 10, 8, 12, 8, 73, 9, 8, 1, 9, 1, 9, 1, 9, 0, 0, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 2, 2, 0, 11, 11, 20, 20, 1, 0, 1, 5, 74, 0, 20, 1, 0, 0, 0, 2, 30, 1, 0, 0, 0, 4, 32, 1, 0, 0, 0, 6, 40, 1, 0, 0, 0, 8, 48, 1, 0, 0, 0, 10, 52, 1, 0, 0, 0, 12, 56, 1, 0, 0, 0, 14, 58, 1, 0, 0, 0, 16, 66, 1, 0, 0, 0, 18, 74, 1, 0, 0, 0, 20, 21, 5, 18, 0, 0, 21, 28, 3, 2, 1, 0, 22, 25, 5, 6, 0, 0, 23, 26, 3, 6, 3, 0, 24, 26, 3, 10, 5, 0, 25, 23, 1, 0, 0, 0, 25, 24, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, 27, 1, 0, 0, 0, 27, 29, 5, 7, 0, 0, 28, 22, 1, 0, 0, 0, 28, 29, 1, 0, 0, 0, 29, 1, 1, 0, 0, 0, 30, 31, 3, 4, 2, 0, 31, 3, 1, 0, 0, 0, 32, 37, 5, 22, 0, 0, 33, 34, 7, 0, 0, 0, 34, 36, 5, 22, 0, 0, 35, 33, 1, 0, 0, 0, 36, 39, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 37, 38, 1, 0, 0, 0, 38, 5, 1, 0, 0, 0, 39, 37, 1, 0, 0, 0, 40, 45, 3, 8, 4, 0, 41, 42, 5, 10, 0, 0, 42, 44, 3, 8, 4, 0, 43, 41, 1, 0, 0, 0, 44, 47, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 7, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 48, 49, 5, 22, 0, 0, 49, 50, 5, 12, 0, 0, 50, 51, 3, 10, 5, 0, 51, 9, 1, 0, 0, 0, 52, 53, 3, 12, 6, 0, 53, 11, 1, 0, 0, 0, 54, 57, 3, 18, 9, 0, 55, 57, 3, 14, 7, 0, 56, 54, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 13, 1, 0, 0, 0, 58, 63, 3, 16, 8, 0, 59, 60, 5, 8, 0, 0, 60, 62, 5, 9, 0, 0, 61, 59, 1, 0, 0, 0, 62, 65, 1, 0, 0, 0, 63, 61, 1, 0, 0, 0, 63, 64, 1, 0, 0, 0, 64, 15, 1, 0, 0, 0, 65, 63, 1, 0, 0, 0, 66, 71, 5, 22, 0, 0, 67, 68, 7, 0, 0, 0, 68, 70, 5, 22, 0, 0, 69, 67, 1, 0, 0, 0, 70, 73, 1, 0, 0, 0, 71, 69, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 17, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 74, 75, 7, 1, 0, 0, 75, 19, 1, 0, 0, 0, 7, 25, 28, 37, 45, 56, 63, 71] \ No newline at end of file +[4, 1, 22, 79, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 3, 0, 22, 8, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 28, 8, 0, 1, 0, 3, 0, 31, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 5, 2, 38, 8, 2, 10, 2, 12, 2, 41, 9, 2, 1, 3, 1, 3, 1, 3, 5, 3, 46, 8, 3, 10, 3, 12, 3, 49, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 3, 6, 59, 8, 6, 1, 7, 1, 7, 1, 7, 5, 7, 64, 8, 7, 10, 7, 12, 7, 67, 9, 7, 1, 8, 1, 8, 1, 8, 5, 8, 72, 8, 8, 10, 8, 12, 8, 75, 9, 8, 1, 9, 1, 9, 1, 9, 0, 0, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 2, 2, 0, 11, 11, 20, 20, 1, 0, 1, 5, 77, 0, 21, 1, 0, 0, 0, 2, 32, 1, 0, 0, 0, 4, 34, 1, 0, 0, 0, 6, 42, 1, 0, 0, 0, 8, 50, 1, 0, 0, 0, 10, 54, 1, 0, 0, 0, 12, 58, 1, 0, 0, 0, 14, 60, 1, 0, 0, 0, 16, 68, 1, 0, 0, 0, 18, 76, 1, 0, 0, 0, 20, 22, 5, 18, 0, 0, 21, 20, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 23, 1, 0, 0, 0, 23, 30, 3, 2, 1, 0, 24, 27, 5, 6, 0, 0, 25, 28, 3, 6, 3, 0, 26, 28, 3, 10, 5, 0, 27, 25, 1, 0, 0, 0, 27, 26, 1, 0, 0, 0, 27, 28, 1, 0, 0, 0, 28, 29, 1, 0, 0, 0, 29, 31, 5, 7, 0, 0, 30, 24, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 1, 1, 0, 0, 0, 32, 33, 3, 4, 2, 0, 33, 3, 1, 0, 0, 0, 34, 39, 5, 22, 0, 0, 35, 36, 7, 0, 0, 0, 36, 38, 5, 22, 0, 0, 37, 35, 1, 0, 0, 0, 38, 41, 1, 0, 0, 0, 39, 37, 1, 0, 0, 0, 39, 40, 1, 0, 0, 0, 40, 5, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 47, 3, 8, 4, 0, 43, 44, 5, 10, 0, 0, 44, 46, 3, 8, 4, 0, 45, 43, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 7, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 5, 22, 0, 0, 51, 52, 5, 12, 0, 0, 52, 53, 3, 10, 5, 0, 53, 9, 1, 0, 0, 0, 54, 55, 3, 12, 6, 0, 55, 11, 1, 0, 0, 0, 56, 59, 3, 18, 9, 0, 57, 59, 3, 14, 7, 0, 58, 56, 1, 0, 0, 0, 58, 57, 1, 0, 0, 0, 59, 13, 1, 0, 0, 0, 60, 65, 3, 16, 8, 0, 61, 62, 5, 8, 0, 0, 62, 64, 5, 9, 0, 0, 63, 61, 1, 0, 0, 0, 64, 67, 1, 0, 0, 0, 65, 63, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 15, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 68, 73, 5, 22, 0, 0, 69, 70, 7, 0, 0, 0, 70, 72, 5, 22, 0, 0, 71, 69, 1, 0, 0, 0, 72, 75, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 17, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 76, 77, 7, 1, 0, 0, 77, 19, 1, 0, 0, 0, 8, 21, 27, 30, 39, 47, 58, 65, 73] \ No newline at end of file diff --git a/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.java b/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.java index b5509f2d7b3..c27dd16856f 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.java +++ b/rewrite-java/src/main/java/org/openrewrite/java/internal/grammar/AnnotationSignatureParser.java @@ -118,10 +118,10 @@ public AnnotationSignatureParser(TokenStream input) { @SuppressWarnings("CheckReturnValue") public static class AnnotationContext extends ParserRuleContext { - public TerminalNode AT() { return getToken(AnnotationSignatureParser.AT, 0); } public AnnotationNameContext annotationName() { return getRuleContext(AnnotationNameContext.class,0); } + public TerminalNode AT() { return getToken(AnnotationSignatureParser.AT, 0); } public TerminalNode LPAREN() { return getToken(AnnotationSignatureParser.LPAREN, 0); } public TerminalNode RPAREN() { return getToken(AnnotationSignatureParser.RPAREN, 0); } public ElementValuePairsContext elementValuePairs() { @@ -156,34 +156,42 @@ public final AnnotationContext annotation() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(20); - match(AT); setState(21); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT) { + { + setState(20); + match(AT); + } + } + + setState(23); annotationName(); - setState(28); + setState(30); _errHandler.sync(this); _la = _input.LA(1); if (_la==LPAREN) { { - setState(22); + setState(24); match(LPAREN); - setState(25); + setState(27); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { case 1: { - setState(23); + setState(25); elementValuePairs(); } break; case 2: { - setState(24); + setState(26); elementValue(); } break; } - setState(27); + setState(29); match(RPAREN); } } @@ -231,7 +239,7 @@ public final AnnotationNameContext annotationName() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(30); + setState(32); qualifiedName(); } } @@ -286,15 +294,15 @@ public final QualifiedNameContext qualifiedName() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(32); + setState(34); match(Identifier); - setState(37); + setState(39); _errHandler.sync(this); _la = _input.LA(1); while (_la==DOT || _la==DOTDOT) { { { - setState(33); + setState(35); _la = _input.LA(1); if ( !(_la==DOT || _la==DOTDOT) ) { _errHandler.recoverInline(this); @@ -304,11 +312,11 @@ public final QualifiedNameContext qualifiedName() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(34); + setState(36); match(Identifier); } } - setState(39); + setState(41); _errHandler.sync(this); _la = _input.LA(1); } @@ -363,21 +371,21 @@ public final ElementValuePairsContext elementValuePairs() throws RecognitionExce try { enterOuterAlt(_localctx, 1); { - setState(40); + setState(42); elementValuePair(); - setState(45); + setState(47); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(41); + setState(43); match(COMMA); - setState(42); + setState(44); elementValuePair(); } } - setState(47); + setState(49); _errHandler.sync(this); _la = _input.LA(1); } @@ -426,11 +434,11 @@ public final ElementValuePairContext elementValuePair() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(48); + setState(50); match(Identifier); - setState(49); + setState(51); match(ASSIGN); - setState(50); + setState(52); elementValue(); } } @@ -475,7 +483,7 @@ public final ElementValueContext elementValue() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(52); + setState(54); primary(); } } @@ -521,7 +529,7 @@ public final PrimaryContext primary() throws RecognitionException { PrimaryContext _localctx = new PrimaryContext(_ctx, getState()); enterRule(_localctx, 12, RULE_primary); try { - setState(56); + setState(58); _errHandler.sync(this); switch (_input.LA(1)) { case IntegerLiteral: @@ -531,14 +539,14 @@ public final PrimaryContext primary() throws RecognitionException { case StringLiteral: enterOuterAlt(_localctx, 1); { - setState(54); + setState(56); literal(); } break; case Identifier: enterOuterAlt(_localctx, 2); { - setState(55); + setState(57); type(); } break; @@ -596,21 +604,21 @@ public final TypeContext type() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(58); + setState(60); classOrInterfaceType(); - setState(63); + setState(65); _errHandler.sync(this); _la = _input.LA(1); while (_la==LBRACK) { { { - setState(59); + setState(61); match(LBRACK); - setState(60); + setState(62); match(RBRACK); } } - setState(65); + setState(67); _errHandler.sync(this); _la = _input.LA(1); } @@ -667,15 +675,15 @@ public final ClassOrInterfaceTypeContext classOrInterfaceType() throws Recogniti try { enterOuterAlt(_localctx, 1); { - setState(66); + setState(68); match(Identifier); - setState(71); + setState(73); _errHandler.sync(this); _la = _input.LA(1); while (_la==DOT || _la==DOTDOT) { { { - setState(67); + setState(69); _la = _input.LA(1); if ( !(_la==DOT || _la==DOTDOT) ) { _errHandler.recoverInline(this); @@ -685,11 +693,11 @@ public final ClassOrInterfaceTypeContext classOrInterfaceType() throws Recogniti _errHandler.reportMatch(this); consume(); } - setState(68); + setState(70); match(Identifier); } } - setState(73); + setState(75); _errHandler.sync(this); _la = _input.LA(1); } @@ -739,7 +747,7 @@ public final LiteralContext literal() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(74); + setState(76); _la = _input.LA(1); if ( !(((_la) & ~0x3f) == 0 && ((1L << _la) & 62L) != 0) ) { _errHandler.recoverInline(this); @@ -763,50 +771,51 @@ public final LiteralContext literal() throws RecognitionException { } public static final String _serializedATN = - "\u0004\u0001\u0016M\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\u0016O\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ - "\b\u0007\b\u0002\t\u0007\t\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ - "\u0001\u0000\u0003\u0000\u001a\b\u0000\u0001\u0000\u0003\u0000\u001d\b"+ - "\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0005"+ - "\u0002$\b\u0002\n\u0002\f\u0002\'\t\u0002\u0001\u0003\u0001\u0003\u0001"+ - "\u0003\u0005\u0003,\b\u0003\n\u0003\f\u0003/\t\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ - "\u0006\u0003\u00069\b\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0005"+ - "\u0007>\b\u0007\n\u0007\f\u0007A\t\u0007\u0001\b\u0001\b\u0001\b\u0005"+ - "\bF\b\b\n\b\f\bI\t\b\u0001\t\u0001\t\u0001\t\u0000\u0000\n\u0000\u0002"+ - "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0000\u0002\u0002\u0000\u000b\u000b"+ - "\u0014\u0014\u0001\u0000\u0001\u0005J\u0000\u0014\u0001\u0000\u0000\u0000"+ - "\u0002\u001e\u0001\u0000\u0000\u0000\u0004 \u0001\u0000\u0000\u0000\u0006"+ - "(\u0001\u0000\u0000\u0000\b0\u0001\u0000\u0000\u0000\n4\u0001\u0000\u0000"+ - "\u0000\f8\u0001\u0000\u0000\u0000\u000e:\u0001\u0000\u0000\u0000\u0010"+ - "B\u0001\u0000\u0000\u0000\u0012J\u0001\u0000\u0000\u0000\u0014\u0015\u0005"+ - "\u0012\u0000\u0000\u0015\u001c\u0003\u0002\u0001\u0000\u0016\u0019\u0005"+ - "\u0006\u0000\u0000\u0017\u001a\u0003\u0006\u0003\u0000\u0018\u001a\u0003"+ - "\n\u0005\u0000\u0019\u0017\u0001\u0000\u0000\u0000\u0019\u0018\u0001\u0000"+ - "\u0000\u0000\u0019\u001a\u0001\u0000\u0000\u0000\u001a\u001b\u0001\u0000"+ - "\u0000\u0000\u001b\u001d\u0005\u0007\u0000\u0000\u001c\u0016\u0001\u0000"+ - "\u0000\u0000\u001c\u001d\u0001\u0000\u0000\u0000\u001d\u0001\u0001\u0000"+ - "\u0000\u0000\u001e\u001f\u0003\u0004\u0002\u0000\u001f\u0003\u0001\u0000"+ - "\u0000\u0000 %\u0005\u0016\u0000\u0000!\"\u0007\u0000\u0000\u0000\"$\u0005"+ - "\u0016\u0000\u0000#!\u0001\u0000\u0000\u0000$\'\u0001\u0000\u0000\u0000"+ - "%#\u0001\u0000\u0000\u0000%&\u0001\u0000\u0000\u0000&\u0005\u0001\u0000"+ - "\u0000\u0000\'%\u0001\u0000\u0000\u0000(-\u0003\b\u0004\u0000)*\u0005"+ - "\n\u0000\u0000*,\u0003\b\u0004\u0000+)\u0001\u0000\u0000\u0000,/\u0001"+ - "\u0000\u0000\u0000-+\u0001\u0000\u0000\u0000-.\u0001\u0000\u0000\u0000"+ - ".\u0007\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u000001\u0005\u0016"+ - "\u0000\u000012\u0005\f\u0000\u000023\u0003\n\u0005\u00003\t\u0001\u0000"+ - "\u0000\u000045\u0003\f\u0006\u00005\u000b\u0001\u0000\u0000\u000069\u0003"+ - "\u0012\t\u000079\u0003\u000e\u0007\u000086\u0001\u0000\u0000\u000087\u0001"+ - "\u0000\u0000\u00009\r\u0001\u0000\u0000\u0000:?\u0003\u0010\b\u0000;<"+ - "\u0005\b\u0000\u0000<>\u0005\t\u0000\u0000=;\u0001\u0000\u0000\u0000>"+ - "A\u0001\u0000\u0000\u0000?=\u0001\u0000\u0000\u0000?@\u0001\u0000\u0000"+ - "\u0000@\u000f\u0001\u0000\u0000\u0000A?\u0001\u0000\u0000\u0000BG\u0005"+ - "\u0016\u0000\u0000CD\u0007\u0000\u0000\u0000DF\u0005\u0016\u0000\u0000"+ - "EC\u0001\u0000\u0000\u0000FI\u0001\u0000\u0000\u0000GE\u0001\u0000\u0000"+ - "\u0000GH\u0001\u0000\u0000\u0000H\u0011\u0001\u0000\u0000\u0000IG\u0001"+ - "\u0000\u0000\u0000JK\u0007\u0001\u0000\u0000K\u0013\u0001\u0000\u0000"+ - "\u0000\u0007\u0019\u001c%-8?G"; + "\b\u0007\b\u0002\t\u0007\t\u0001\u0000\u0003\u0000\u0016\b\u0000\u0001"+ + "\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0003\u0000\u001c\b\u0000\u0001"+ + "\u0000\u0003\u0000\u001f\b\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0005\u0002&\b\u0002\n\u0002\f\u0002)\t\u0002\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0005\u0003.\b\u0003\n\u0003\f\u00031\t"+ + "\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001"+ + "\u0005\u0001\u0006\u0001\u0006\u0003\u0006;\b\u0006\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0005\u0007@\b\u0007\n\u0007\f\u0007C\t\u0007\u0001"+ + "\b\u0001\b\u0001\b\u0005\bH\b\b\n\b\f\bK\t\b\u0001\t\u0001\t\u0001\t\u0000"+ + "\u0000\n\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0000\u0002\u0002"+ + "\u0000\u000b\u000b\u0014\u0014\u0001\u0000\u0001\u0005M\u0000\u0015\u0001"+ + "\u0000\u0000\u0000\u0002 \u0001\u0000\u0000\u0000\u0004\"\u0001\u0000"+ + "\u0000\u0000\u0006*\u0001\u0000\u0000\u0000\b2\u0001\u0000\u0000\u0000"+ + "\n6\u0001\u0000\u0000\u0000\f:\u0001\u0000\u0000\u0000\u000e<\u0001\u0000"+ + "\u0000\u0000\u0010D\u0001\u0000\u0000\u0000\u0012L\u0001\u0000\u0000\u0000"+ + "\u0014\u0016\u0005\u0012\u0000\u0000\u0015\u0014\u0001\u0000\u0000\u0000"+ + "\u0015\u0016\u0001\u0000\u0000\u0000\u0016\u0017\u0001\u0000\u0000\u0000"+ + "\u0017\u001e\u0003\u0002\u0001\u0000\u0018\u001b\u0005\u0006\u0000\u0000"+ + "\u0019\u001c\u0003\u0006\u0003\u0000\u001a\u001c\u0003\n\u0005\u0000\u001b"+ + "\u0019\u0001\u0000\u0000\u0000\u001b\u001a\u0001\u0000\u0000\u0000\u001b"+ + "\u001c\u0001\u0000\u0000\u0000\u001c\u001d\u0001\u0000\u0000\u0000\u001d"+ + "\u001f\u0005\u0007\u0000\u0000\u001e\u0018\u0001\u0000\u0000\u0000\u001e"+ + "\u001f\u0001\u0000\u0000\u0000\u001f\u0001\u0001\u0000\u0000\u0000 !\u0003"+ + "\u0004\u0002\u0000!\u0003\u0001\u0000\u0000\u0000\"\'\u0005\u0016\u0000"+ + "\u0000#$\u0007\u0000\u0000\u0000$&\u0005\u0016\u0000\u0000%#\u0001\u0000"+ + "\u0000\u0000&)\u0001\u0000\u0000\u0000\'%\u0001\u0000\u0000\u0000\'(\u0001"+ + "\u0000\u0000\u0000(\u0005\u0001\u0000\u0000\u0000)\'\u0001\u0000\u0000"+ + "\u0000*/\u0003\b\u0004\u0000+,\u0005\n\u0000\u0000,.\u0003\b\u0004\u0000"+ + "-+\u0001\u0000\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000"+ + "\u0000/0\u0001\u0000\u0000\u00000\u0007\u0001\u0000\u0000\u00001/\u0001"+ + "\u0000\u0000\u000023\u0005\u0016\u0000\u000034\u0005\f\u0000\u000045\u0003"+ + "\n\u0005\u00005\t\u0001\u0000\u0000\u000067\u0003\f\u0006\u00007\u000b"+ + "\u0001\u0000\u0000\u00008;\u0003\u0012\t\u00009;\u0003\u000e\u0007\u0000"+ + ":8\u0001\u0000\u0000\u0000:9\u0001\u0000\u0000\u0000;\r\u0001\u0000\u0000"+ + "\u0000\u0005\b\u0000\u0000>@\u0005\t\u0000\u0000"+ + "?=\u0001\u0000\u0000\u0000@C\u0001\u0000\u0000\u0000A?\u0001\u0000\u0000"+ + "\u0000AB\u0001\u0000\u0000\u0000B\u000f\u0001\u0000\u0000\u0000CA\u0001"+ + "\u0000\u0000\u0000DI\u0005\u0016\u0000\u0000EF\u0007\u0000\u0000\u0000"+ + "FH\u0005\u0016\u0000\u0000GE\u0001\u0000\u0000\u0000HK\u0001\u0000\u0000"+ + "\u0000IG\u0001\u0000\u0000\u0000IJ\u0001\u0000\u0000\u0000J\u0011\u0001"+ + "\u0000\u0000\u0000KI\u0001\u0000\u0000\u0000LM\u0007\u0001\u0000\u0000"+ + "M\u0013\u0001\u0000\u0000\u0000\b\u0015\u001b\u001e\'/:AI"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static {