From b2cad64dfc0086a314e8b5d842a4644aaede021a Mon Sep 17 00:00:00 2001 From: Jay Arthanareeswaran Date: Thu, 30 Nov 2023 17:48:32 +0530 Subject: [PATCH] [21] JEP 430 String Templates (#1513) Grammar, compiler AST, resolution and code generation changes --- .../.settings/org.eclipse.jdt.core.prefs | 14 + .../src/META-INF/MANIFEST.MF | 3 + .../src/java/io/InputStream.java | 5 + .../src/java/io/PrintStream.java | 8 + .../src/java/io/Serializable.java | 4 + .../src/java/lang/CharSequence.java | 5 + .../src/java/lang/Class.java | 4 + .../src/java/lang/ClassNotFoundException.java | 20 + .../java/lang/CloneNotSupportedException.java | 4 + .../src/java/lang/Comparable.java | 4 + .../src/java/lang/Deprecated.java | 6 + JCL/converterJclMin21/src/java/lang/Enum.java | 18 + .../src/java/lang/Error.java | 16 + .../src/java/lang/Exception.java | 19 + .../src/java/lang/IllegalAccessException.java | 5 + .../lang/IllegalMonitorStateException.java | 4 + .../lang/IncompatibleClassChangeError.java | 13 + .../src/java/lang/Integer.java | 59 + .../src/java/lang/InterruptedException.java | 4 + .../src/java/lang/Iterable.java | 10 + .../src/java/lang/LinkageError.java | 17 + .../src/java/lang/NoClassDefFoundError.java | 13 + .../src/java/lang/NoSuchFieldError.java | 13 + .../src/java/lang/NoSuchMethodException.java | 5 + .../src/java/lang/NullPointerException.java | 11 + .../src/java/lang/Number.java | 29 + .../src/java/lang/Object.java | 34 + .../src/java/lang/Override.java | 7 + .../src/java/lang/Record.java | 9 + .../lang/ReflectiveOperationException.java | 26 + .../src/java/lang/RuntimeException.java | 12 + .../src/java/lang/String.java | 8 + .../src/java/lang/StringTemplate.java | 57 + .../src/java/lang/System.java | 20 + .../src/java/lang/Throwable.java | 20 + .../src/java/lang/annotation/Annotation.java | 4 + .../src/java/lang/annotation/Documented.java | 12 + .../src/java/lang/annotation/ElementType.java | 48 + .../src/java/lang/annotation/Inherited.java | 13 + .../src/java/lang/annotation/Retention.java | 14 + .../java/lang/annotation/RetentionPolicy.java | 6 + .../src/java/lang/annotation/Target.java | 14 + .../src/java/lang/invoke/MethodHandle.java | 39 + .../src/java/lang/invoke/MethodHandles.java | 22 + .../src/java/lang/invoke/MethodType.java | 17 + .../src/java/lang/invoke/TypeDescriptor.java | 31 + .../src/java/lang/runtime/ObjectMethods.java | 14 + .../java/lang/runtime/SwitchBootstraps.java | 30 + .../java/lang/runtime/TemplateRuntime.java | 30 + .../src/java/util/Collection.java | 9 + .../src/java/util/Iterator.java | 7 + JCL/converterJclMin21/src/java/util/List.java | 4 + JCL/converterJclMin21/src/java/util/Map.java | 5 + .../src/java/util/function/Consumer.java | 10 + .../src/javax/lang/model/SourceVersion.java | 71 + JCL/converterJclMin21/src/module-info.java | 7 + .../.settings/.api_filters | 23 - .../META-INF/MANIFEST.MF | 2 +- .../grammar/java.g | 30 + org.eclipse.jdt.core.compiler.batch/pom.xml | 2 +- .../jdt/internal/compiler/ClassFile.java | 49 +- .../internal/compiler/ast/StringLiteral.java | 2 +- .../internal/compiler/ast/StringTemplate.java | 116 + .../compiler/ast/TemplateExpression.java | 80 + .../jdt/internal/compiler/ast/TextBlock.java | 279 +- .../compiler/codegen/ConstantPool.java | 4 + .../compiler/impl/CompilerOptions.java | 1 + .../internal/compiler/impl/JavaFeature.java | 4 + .../compiler/lookup/CompilationUnitScope.java | 78 +- .../jdt/internal/compiler/lookup/Scope.java | 10 + .../compiler/lookup/TypeConstants.java | 4 + .../jdt/internal/compiler/messages.properties | 3 +- .../jdt/internal/compiler/parser/Parser.java | 3568 +++++++++-------- .../parser/ParserBasicInformation.java | 30 +- .../jdt/internal/compiler/parser/Scanner.java | 496 +-- .../compiler/parser/TerminalTokens.java | 112 +- .../parser/diagnose/DiagnoseParser.java | 6 +- .../jdt/internal/compiler/parser/parser1.rsc | Bin 37426 -> 38034 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 2504 -> 2510 bytes .../jdt/internal/compiler/parser/parser15.rsc | Bin 1684 -> 1684 bytes .../jdt/internal/compiler/parser/parser16.rsc | Bin 2476 -> 2516 bytes .../jdt/internal/compiler/parser/parser17.rsc | Bin 945 -> 952 bytes .../jdt/internal/compiler/parser/parser18.rsc | Bin 16424 -> 17508 bytes .../jdt/internal/compiler/parser/parser19.rsc | Bin 644 -> 646 bytes .../jdt/internal/compiler/parser/parser2.rsc | Bin 35536 -> 36130 bytes .../jdt/internal/compiler/parser/parser20.rsc | Bin 18962 -> 19112 bytes .../jdt/internal/compiler/parser/parser21.rsc | Bin 7560 -> 7616 bytes .../jdt/internal/compiler/parser/parser22.rsc | Bin 874 -> 878 bytes .../jdt/internal/compiler/parser/parser23.rsc | Bin 100 -> 100 bytes .../jdt/internal/compiler/parser/parser24.rsc | Bin 874 -> 878 bytes .../jdt/internal/compiler/parser/parser3.rsc | Bin 2476 -> 2516 bytes .../jdt/internal/compiler/parser/parser4.rsc | Bin 3982 -> 3990 bytes .../jdt/internal/compiler/parser/parser5.rsc | Bin 2476 -> 2516 bytes .../jdt/internal/compiler/parser/parser6.rsc | Bin 1664 -> 1666 bytes .../jdt/internal/compiler/parser/parser7.rsc | Bin 278 -> 282 bytes .../jdt/internal/compiler/parser/parser8.rsc | Bin 874 -> 878 bytes .../jdt/internal/compiler/parser/parser9.rsc | Bin 16322 -> 17406 bytes .../compiler/parser/readableNames.props | 1 + .../jdt/internal/compiler/util/Messages.java | 1 + .../parser/ComplianceDiagnoseTest.java | 4 +- .../compiler/parser/DietRecoveryTest.java | 2 +- .../compiler/regression/ScannerTest.java | 2 +- .../regression/StringTemplateTest.java | 1681 ++++++++ .../tests/compiler/regression/TestAll.java | 1 + .../compiler/regression/TextBlockTest.java | 114 +- .../JCL/JclMin21.jar | Bin 0 -> 33578 bytes .../JCL/JclMin21.zip | Bin 0 -> 30981 bytes .../JCL/converterJclMin21.jar | Bin 0 -> 33578 bytes .../JCL/converterJclMin21src.zip | Bin 0 -> 30981 bytes org.eclipse.jdt.core/META-INF/MANIFEST.MF | 2 +- .../complete/CompletionScanner.java | 6 +- .../jdt/core/compiler/ITerminalSymbols.java | 11 +- .../jdt/internal/core/util/PublicScanner.java | 2 + org.eclipse.jdt.core/pom.xml | 2 +- 118 files changed, 5444 insertions(+), 2197 deletions(-) create mode 100644 JCL/converterJclMin21/.settings/org.eclipse.jdt.core.prefs create mode 100644 JCL/converterJclMin21/src/META-INF/MANIFEST.MF create mode 100644 JCL/converterJclMin21/src/java/io/InputStream.java create mode 100644 JCL/converterJclMin21/src/java/io/PrintStream.java create mode 100644 JCL/converterJclMin21/src/java/io/Serializable.java create mode 100644 JCL/converterJclMin21/src/java/lang/CharSequence.java create mode 100644 JCL/converterJclMin21/src/java/lang/Class.java create mode 100644 JCL/converterJclMin21/src/java/lang/ClassNotFoundException.java create mode 100644 JCL/converterJclMin21/src/java/lang/CloneNotSupportedException.java create mode 100644 JCL/converterJclMin21/src/java/lang/Comparable.java create mode 100644 JCL/converterJclMin21/src/java/lang/Deprecated.java create mode 100644 JCL/converterJclMin21/src/java/lang/Enum.java create mode 100644 JCL/converterJclMin21/src/java/lang/Error.java create mode 100644 JCL/converterJclMin21/src/java/lang/Exception.java create mode 100644 JCL/converterJclMin21/src/java/lang/IllegalAccessException.java create mode 100644 JCL/converterJclMin21/src/java/lang/IllegalMonitorStateException.java create mode 100644 JCL/converterJclMin21/src/java/lang/IncompatibleClassChangeError.java create mode 100644 JCL/converterJclMin21/src/java/lang/Integer.java create mode 100644 JCL/converterJclMin21/src/java/lang/InterruptedException.java create mode 100644 JCL/converterJclMin21/src/java/lang/Iterable.java create mode 100644 JCL/converterJclMin21/src/java/lang/LinkageError.java create mode 100644 JCL/converterJclMin21/src/java/lang/NoClassDefFoundError.java create mode 100644 JCL/converterJclMin21/src/java/lang/NoSuchFieldError.java create mode 100644 JCL/converterJclMin21/src/java/lang/NoSuchMethodException.java create mode 100644 JCL/converterJclMin21/src/java/lang/NullPointerException.java create mode 100644 JCL/converterJclMin21/src/java/lang/Number.java create mode 100644 JCL/converterJclMin21/src/java/lang/Object.java create mode 100644 JCL/converterJclMin21/src/java/lang/Override.java create mode 100644 JCL/converterJclMin21/src/java/lang/Record.java create mode 100644 JCL/converterJclMin21/src/java/lang/ReflectiveOperationException.java create mode 100644 JCL/converterJclMin21/src/java/lang/RuntimeException.java create mode 100644 JCL/converterJclMin21/src/java/lang/String.java create mode 100644 JCL/converterJclMin21/src/java/lang/StringTemplate.java create mode 100644 JCL/converterJclMin21/src/java/lang/System.java create mode 100644 JCL/converterJclMin21/src/java/lang/Throwable.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/Annotation.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/Documented.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/ElementType.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/Inherited.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/Retention.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/RetentionPolicy.java create mode 100644 JCL/converterJclMin21/src/java/lang/annotation/Target.java create mode 100644 JCL/converterJclMin21/src/java/lang/invoke/MethodHandle.java create mode 100644 JCL/converterJclMin21/src/java/lang/invoke/MethodHandles.java create mode 100644 JCL/converterJclMin21/src/java/lang/invoke/MethodType.java create mode 100644 JCL/converterJclMin21/src/java/lang/invoke/TypeDescriptor.java create mode 100644 JCL/converterJclMin21/src/java/lang/runtime/ObjectMethods.java create mode 100644 JCL/converterJclMin21/src/java/lang/runtime/SwitchBootstraps.java create mode 100644 JCL/converterJclMin21/src/java/lang/runtime/TemplateRuntime.java create mode 100644 JCL/converterJclMin21/src/java/util/Collection.java create mode 100644 JCL/converterJclMin21/src/java/util/Iterator.java create mode 100644 JCL/converterJclMin21/src/java/util/List.java create mode 100644 JCL/converterJclMin21/src/java/util/Map.java create mode 100644 JCL/converterJclMin21/src/java/util/function/Consumer.java create mode 100644 JCL/converterJclMin21/src/javax/lang/model/SourceVersion.java create mode 100644 JCL/converterJclMin21/src/module-info.java delete mode 100644 org.eclipse.jdt.core.compiler.batch/.settings/.api_filters create mode 100644 org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringTemplate.java create mode 100644 org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TemplateExpression.java create mode 100644 org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StringTemplateTest.java create mode 100644 org.eclipse.jdt.core.tests.model/JCL/JclMin21.jar create mode 100644 org.eclipse.jdt.core.tests.model/JCL/JclMin21.zip create mode 100644 org.eclipse.jdt.core.tests.model/JCL/converterJclMin21.jar create mode 100644 org.eclipse.jdt.core.tests.model/JCL/converterJclMin21src.zip diff --git a/JCL/converterJclMin21/.settings/org.eclipse.jdt.core.prefs b/JCL/converterJclMin21/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..4c9541fa57a --- /dev/null +++ b/JCL/converterJclMin21/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=enabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 diff --git a/JCL/converterJclMin21/src/META-INF/MANIFEST.MF b/JCL/converterJclMin21/src/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..c72a1fbae7a --- /dev/null +++ b/JCL/converterJclMin21/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Created-By: 1.8.0_151 (Oracle Corporation) + diff --git a/JCL/converterJclMin21/src/java/io/InputStream.java b/JCL/converterJclMin21/src/java/io/InputStream.java new file mode 100644 index 00000000000..82511babed9 --- /dev/null +++ b/JCL/converterJclMin21/src/java/io/InputStream.java @@ -0,0 +1,5 @@ +package java.io; + +public class InputStream { + +} diff --git a/JCL/converterJclMin21/src/java/io/PrintStream.java b/JCL/converterJclMin21/src/java/io/PrintStream.java new file mode 100644 index 00000000000..19059381a2f --- /dev/null +++ b/JCL/converterJclMin21/src/java/io/PrintStream.java @@ -0,0 +1,8 @@ +package java.io; + +public class PrintStream { + public void println(String x) { + } + public void println(int x) { + } +} diff --git a/JCL/converterJclMin21/src/java/io/Serializable.java b/JCL/converterJclMin21/src/java/io/Serializable.java new file mode 100644 index 00000000000..3629567396a --- /dev/null +++ b/JCL/converterJclMin21/src/java/io/Serializable.java @@ -0,0 +1,4 @@ +package java.io; + +public interface Serializable { +} diff --git a/JCL/converterJclMin21/src/java/lang/CharSequence.java b/JCL/converterJclMin21/src/java/lang/CharSequence.java new file mode 100644 index 00000000000..b03fc9e823b --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/CharSequence.java @@ -0,0 +1,5 @@ +package java.lang; + +public interface CharSequence { + int length(); +} diff --git a/JCL/converterJclMin21/src/java/lang/Class.java b/JCL/converterJclMin21/src/java/lang/Class.java new file mode 100644 index 00000000000..7d08bf1f389 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Class.java @@ -0,0 +1,4 @@ +package java.lang; + +public class Class { +} diff --git a/JCL/converterJclMin21/src/java/lang/ClassNotFoundException.java b/JCL/converterJclMin21/src/java/lang/ClassNotFoundException.java new file mode 100644 index 00000000000..7765ed820ae --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/ClassNotFoundException.java @@ -0,0 +1,20 @@ +package java.lang; + +public class ClassNotFoundException extends ReflectiveOperationException { + + public ClassNotFoundException() { + super((Throwable)null); // Disallow initCause + } + + public ClassNotFoundException(String s) { + super(s, null); // Disallow initCause + } + + public ClassNotFoundException(String s, Throwable ex) { + super(s, ex); // Disallow initCause + } + + public Throwable getException() { + return getCause(); + } +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/CloneNotSupportedException.java b/JCL/converterJclMin21/src/java/lang/CloneNotSupportedException.java new file mode 100644 index 00000000000..6f05a932fab --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/CloneNotSupportedException.java @@ -0,0 +1,4 @@ +package java.lang; + +public class CloneNotSupportedException extends Exception { +} diff --git a/JCL/converterJclMin21/src/java/lang/Comparable.java b/JCL/converterJclMin21/src/java/lang/Comparable.java new file mode 100644 index 00000000000..59fb9eddd47 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Comparable.java @@ -0,0 +1,4 @@ +package java.lang; + +public interface Comparable { +} diff --git a/JCL/converterJclMin21/src/java/lang/Deprecated.java b/JCL/converterJclMin21/src/java/lang/Deprecated.java new file mode 100644 index 00000000000..5226e586c7e --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Deprecated.java @@ -0,0 +1,6 @@ +package java.lang; +import java.lang.annotation.*; +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface Deprecated { +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/Enum.java b/JCL/converterJclMin21/src/java/lang/Enum.java new file mode 100644 index 00000000000..f68f11eacec --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Enum.java @@ -0,0 +1,18 @@ +package java.lang; + +public abstract class Enum> implements Comparable, java.io.Serializable { + private static final long serialVersionUID = 2L; + + protected Enum(String name, int ordinal) { + } + public final String name() { + return null; + } + public final int ordinal() { + return 0; + } + public static > T valueOf(Class enumClass, + String name) { + return null; + } +} diff --git a/JCL/converterJclMin21/src/java/lang/Error.java b/JCL/converterJclMin21/src/java/lang/Error.java new file mode 100644 index 00000000000..820d8c62226 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Error.java @@ -0,0 +1,16 @@ +package java.lang; + +public class Error extends Throwable { + + public Error(java.lang.String s) { + // TODO Auto-generated constructor stub + } + + public Error(java.lang.String s, java.lang.Throwable cause) { + // TODO Auto-generated constructor stub + } + + public Error() { + // TODO Auto-generated constructor stub + } +} diff --git a/JCL/converterJclMin21/src/java/lang/Exception.java b/JCL/converterJclMin21/src/java/lang/Exception.java new file mode 100644 index 00000000000..88b222a9c06 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Exception.java @@ -0,0 +1,19 @@ +package java.lang; + +public class Exception extends Throwable { + public Exception() { + super(); + } + + public Exception(String message) { + super(message); + } + + public Exception(String message, Throwable cause) { + super(message, cause); + } + + public Exception(Throwable cause) { + super(cause); + } +} diff --git a/JCL/converterJclMin21/src/java/lang/IllegalAccessException.java b/JCL/converterJclMin21/src/java/lang/IllegalAccessException.java new file mode 100644 index 00000000000..0d13e1e0571 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/IllegalAccessException.java @@ -0,0 +1,5 @@ +package java.lang; + +public class IllegalAccessException extends RuntimeException { + +} diff --git a/JCL/converterJclMin21/src/java/lang/IllegalMonitorStateException.java b/JCL/converterJclMin21/src/java/lang/IllegalMonitorStateException.java new file mode 100644 index 00000000000..1f67418128c --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/IllegalMonitorStateException.java @@ -0,0 +1,4 @@ +package java.lang; + +public class IllegalMonitorStateException extends RuntimeException { +} diff --git a/JCL/converterJclMin21/src/java/lang/IncompatibleClassChangeError.java b/JCL/converterJclMin21/src/java/lang/IncompatibleClassChangeError.java new file mode 100644 index 00000000000..9552b875b85 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/IncompatibleClassChangeError.java @@ -0,0 +1,13 @@ + +package java.lang; +public +class IncompatibleClassChangeError extends LinkageError { + + public IncompatibleClassChangeError () { + super(); + } + + public IncompatibleClassChangeError(String s) { + super(s); + } +} diff --git a/JCL/converterJclMin21/src/java/lang/Integer.java b/JCL/converterJclMin21/src/java/lang/Integer.java new file mode 100644 index 00000000000..f9b9e0b6ee0 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Integer.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package java.lang; + +public class Integer extends Number implements Comparable { + private static final long serialVersionUID = 6462609062775655000L; + + public Integer(int i) { + } + public Integer(String s) { + } + public static final int MAX_VALUE= 2147483647; + public static final int MIN_VALUE= -2147483647; + + public static int parseInt(String s) { + return 0; + } + public static String toHexString(int i) { + return null; + } + public static String toString(int i) { + return null; + } + /* (non-Javadoc) + * @see java.lang.Number#doubleValue() + */ + public double doubleValue() { + return 0; + } + /* (non-Javadoc) + * @see java.lang.Number#floatValue() + */ + public float floatValue() { + return 0; + } + /* (non-Javadoc) + * @see java.lang.Number#intValue() + */ + public int intValue() { + return 0; + } + /* (non-Javadoc) + * @see java.lang.Number#longValue() + */ + public long longValue() { + return 0; + } + public int compareTo(Integer i) { + return 0; + } +} diff --git a/JCL/converterJclMin21/src/java/lang/InterruptedException.java b/JCL/converterJclMin21/src/java/lang/InterruptedException.java new file mode 100644 index 00000000000..93b236c4210 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/InterruptedException.java @@ -0,0 +1,4 @@ +package java.lang; + +public class InterruptedException extends Exception { +} diff --git a/JCL/converterJclMin21/src/java/lang/Iterable.java b/JCL/converterJclMin21/src/java/lang/Iterable.java new file mode 100644 index 00000000000..ab4b9d53f69 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Iterable.java @@ -0,0 +1,10 @@ +package java.lang; + +import java.util.Iterator; +import java.util.function.Consumer; + +public interface Iterable { + Iterator iterator(); + default void forEach(Consumer action) { + } +} diff --git a/JCL/converterJclMin21/src/java/lang/LinkageError.java b/JCL/converterJclMin21/src/java/lang/LinkageError.java new file mode 100644 index 00000000000..199d39d98bc --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/LinkageError.java @@ -0,0 +1,17 @@ +package java.lang; + +public +class LinkageError extends Error { + + public LinkageError() { + super(); + } + + public LinkageError(String s) { + super(s); + } + + public LinkageError(String s, Throwable cause) { + super(s, cause); + } +} diff --git a/JCL/converterJclMin21/src/java/lang/NoClassDefFoundError.java b/JCL/converterJclMin21/src/java/lang/NoClassDefFoundError.java new file mode 100644 index 00000000000..da0fe415c37 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/NoClassDefFoundError.java @@ -0,0 +1,13 @@ +package java.lang; + +public +class NoClassDefFoundError extends LinkageError { + + public NoClassDefFoundError() { + super(); + } + + public NoClassDefFoundError(String s) { + super(s); + } +} diff --git a/JCL/converterJclMin21/src/java/lang/NoSuchFieldError.java b/JCL/converterJclMin21/src/java/lang/NoSuchFieldError.java new file mode 100644 index 00000000000..486e5339dcf --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/NoSuchFieldError.java @@ -0,0 +1,13 @@ +package java.lang; + +public +class NoSuchFieldError extends IncompatibleClassChangeError { + + public NoSuchFieldError() { + super(); + } + + public NoSuchFieldError(String s) { + super(s); + } +} diff --git a/JCL/converterJclMin21/src/java/lang/NoSuchMethodException.java b/JCL/converterJclMin21/src/java/lang/NoSuchMethodException.java new file mode 100644 index 00000000000..3dd142bdd33 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/NoSuchMethodException.java @@ -0,0 +1,5 @@ +package java.lang; + +public class NoSuchMethodException extends RuntimeException { + +} diff --git a/JCL/converterJclMin21/src/java/lang/NullPointerException.java b/JCL/converterJclMin21/src/java/lang/NullPointerException.java new file mode 100644 index 00000000000..5e4ffa680d5 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/NullPointerException.java @@ -0,0 +1,11 @@ +package java.lang; +public +class NullPointerException extends RuntimeException { + public NullPointerException() { + super(); + } + + public NullPointerException(String s) { + super(s); + } +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/Number.java b/JCL/converterJclMin21/src/java/lang/Number.java new file mode 100644 index 00000000000..db90345a81b --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Number.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 1994, 2021, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang; + +public abstract class Number implements java.io.Serializable { +} diff --git a/JCL/converterJclMin21/src/java/lang/Object.java b/JCL/converterJclMin21/src/java/lang/Object.java new file mode 100644 index 00000000000..71ddb4ff834 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Object.java @@ -0,0 +1,34 @@ +package java.lang; + +public class Object { + +public Object() { +} +protected Object clone() throws CloneNotSupportedException { + return null; +} +public boolean equals (Object obj) { + return false; +} +protected void finalize () throws Throwable { +} +public final Class getClass() { + return null; +} +public int hashCode() { + return -1; +} +public final void notify() throws IllegalMonitorStateException { +} +public final void notifyAll() throws IllegalMonitorStateException { +} +public String toString () { + return null; +} +public final void wait () throws IllegalMonitorStateException, InterruptedException { +} +public final void wait (long millis) throws IllegalMonitorStateException, InterruptedException { +} +public final void wait (long millis, int nanos) throws IllegalMonitorStateException, InterruptedException { +} +} diff --git a/JCL/converterJclMin21/src/java/lang/Override.java b/JCL/converterJclMin21/src/java/lang/Override.java new file mode 100644 index 00000000000..b94fa6e860a --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Override.java @@ -0,0 +1,7 @@ +package java.lang; + +import java.lang.annotation.*; +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.SOURCE) +public @interface Override { +} diff --git a/JCL/converterJclMin21/src/java/lang/Record.java b/JCL/converterJclMin21/src/java/lang/Record.java new file mode 100644 index 00000000000..c9913367b99 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Record.java @@ -0,0 +1,9 @@ +package java.lang; +public abstract class Record { + @Override + public abstract boolean equals(Object obj); + @Override + public abstract int hashCode(); + @Override + public abstract String toString(); +} diff --git a/JCL/converterJclMin21/src/java/lang/ReflectiveOperationException.java b/JCL/converterJclMin21/src/java/lang/ReflectiveOperationException.java new file mode 100644 index 00000000000..0860c679050 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/ReflectiveOperationException.java @@ -0,0 +1,26 @@ + +package java.lang; + +public class ReflectiveOperationException extends Exception { + static final long serialVersionUID = 123456789L; + + public ReflectiveOperationException() { + super(); + } + + public ReflectiveOperationException(String message) { + super(message); + } + + public ReflectiveOperationException(String message, Throwable cause) { + super(message, cause); + } + + public ReflectiveOperationException(Throwable cause) { + super(cause); + } + + public java.lang.Throwable getCause() { + return getCause(); + } +} diff --git a/JCL/converterJclMin21/src/java/lang/RuntimeException.java b/JCL/converterJclMin21/src/java/lang/RuntimeException.java new file mode 100644 index 00000000000..3d94712d7f8 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/RuntimeException.java @@ -0,0 +1,12 @@ +package java.lang; + +public class RuntimeException extends Exception { + + public RuntimeException(java.lang.String s) { + // TODO Auto-generated constructor stub + } + + public RuntimeException() { + // TODO Auto-generated constructor stub + } +} diff --git a/JCL/converterJclMin21/src/java/lang/String.java b/JCL/converterJclMin21/src/java/lang/String.java new file mode 100644 index 00000000000..64f759b78be --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/String.java @@ -0,0 +1,8 @@ +package java.lang; + +public class String implements CharSequence { + public int length() { return 0; } + public int codePointAt(int index) { + return 0; + } +} diff --git a/JCL/converterJclMin21/src/java/lang/StringTemplate.java b/JCL/converterJclMin21/src/java/lang/StringTemplate.java new file mode 100644 index 00000000000..f5e92f791f1 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/StringTemplate.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodType; +import java.util.List; + +public interface StringTemplate { + List fragments(); + + List values(); + + default String interpolate() { + return null; + } + static String interpolate(List fragments, List values) { + return null; + } + default R + process(Processor processor) throws E { + return processor.process(this); + } + + Processor STR = null; + + Processor RAW = null; + + public interface Processor { + + R process(StringTemplate stringTemplate) throws E; + } + +} diff --git a/JCL/converterJclMin21/src/java/lang/System.java b/JCL/converterJclMin21/src/java/lang/System.java new file mode 100644 index 00000000000..bf56c93aa2d --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/System.java @@ -0,0 +1,20 @@ +package java.lang; + +import java.io.InputStream; +import java.io.PrintStream; + +public final class System { + private static native void registerNatives(); + static { + registerNatives(); + } + + private System() { + } + + public static final InputStream in = null; + + public static final PrintStream out = null; + + +} diff --git a/JCL/converterJclMin21/src/java/lang/Throwable.java b/JCL/converterJclMin21/src/java/lang/Throwable.java new file mode 100644 index 00000000000..73ab84b6950 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/Throwable.java @@ -0,0 +1,20 @@ +package java.lang; + +public class Throwable { + + public Throwable(java.lang.String message) { + // TODO Auto-generated constructor stub + } + + public Throwable() { + // TODO Auto-generated constructor stub + } + + public Throwable(java.lang.String message, Throwable cause) { + // TODO Auto-generated constructor stub + } + + public Throwable(Throwable cause) { + // TODO Auto-generated constructor stub + } +} diff --git a/JCL/converterJclMin21/src/java/lang/annotation/Annotation.java b/JCL/converterJclMin21/src/java/lang/annotation/Annotation.java new file mode 100644 index 00000000000..530c272ea43 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/Annotation.java @@ -0,0 +1,4 @@ +package java.lang.annotation; +public interface Annotation { + +} diff --git a/JCL/converterJclMin21/src/java/lang/annotation/Documented.java b/JCL/converterJclMin21/src/java/lang/annotation/Documented.java new file mode 100644 index 00000000000..b70fc969617 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/Documented.java @@ -0,0 +1,12 @@ +package java.lang.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Documented { +} diff --git a/JCL/converterJclMin21/src/java/lang/annotation/ElementType.java b/JCL/converterJclMin21/src/java/lang/annotation/ElementType.java new file mode 100644 index 00000000000..7b5b59578e7 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/ElementType.java @@ -0,0 +1,48 @@ +package java.lang.annotation; + +public enum ElementType { + /** Class, interface (including annotation type), or enum declaration */ + TYPE, + + /** Field declaration (includes enum constants) */ + FIELD, + + /** Method declaration */ + METHOD, + + /** Formal parameter declaration */ + PARAMETER, + + /** Constructor declaration */ + CONSTRUCTOR, + + /** Local variable declaration */ + LOCAL_VARIABLE, + + /** Annotation type declaration */ + ANNOTATION_TYPE, + + /** Package declaration */ + PACKAGE, + + /** + * Type parameter declaration + * + * @since 1.8 + */ + TYPE_PARAMETER, + + /** + * Use of a type + * + * @since 1.8 + */ + TYPE_USE, + + /** + * Module declaration. + * + * @since 9 + */ + MODULE +} diff --git a/JCL/converterJclMin21/src/java/lang/annotation/Inherited.java b/JCL/converterJclMin21/src/java/lang/annotation/Inherited.java new file mode 100644 index 00000000000..e51219ed399 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/Inherited.java @@ -0,0 +1,13 @@ +package java.lang.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Inherited { +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/annotation/Retention.java b/JCL/converterJclMin21/src/java/lang/annotation/Retention.java new file mode 100644 index 00000000000..9a23c8186db --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/Retention.java @@ -0,0 +1,14 @@ +package java.lang.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Retention { + RetentionPolicy value(); +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/annotation/RetentionPolicy.java b/JCL/converterJclMin21/src/java/lang/annotation/RetentionPolicy.java new file mode 100644 index 00000000000..26349b19198 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/RetentionPolicy.java @@ -0,0 +1,6 @@ +package java.lang.annotation; +public enum RetentionPolicy { + CLASS, + SOURCE, + RUNTIME +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/annotation/Target.java b/JCL/converterJclMin21/src/java/lang/annotation/Target.java new file mode 100644 index 00000000000..8cd620502ac --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/annotation/Target.java @@ -0,0 +1,14 @@ +package java.lang.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.ANNOTATION_TYPE) +public @interface Target { + ElementType[] value(); +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/invoke/MethodHandle.java b/JCL/converterJclMin21/src/java/lang/invoke/MethodHandle.java new file mode 100644 index 00000000000..69736475bd0 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/invoke/MethodHandle.java @@ -0,0 +1,39 @@ +package java.lang.invoke; +/******************************************************************************* + * Copyright (c) 2011 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.lang.invoke.MethodType; + +public abstract class MethodHandle { + @Target(METHOD) + @Retention(RUNTIME) + @interface PolymorphicSignature { + } + + @PolymorphicSignature + public final native Object invoke(Object... args) throws Throwable; + + @PolymorphicSignature + public final native Object invokeExact(Object... args) throws Throwable; + + public native Object invokeWithArguments(Object... arguments) + throws Throwable; + + public native boolean isVarargsCollector(); + + public native MethodHandle asType(MethodType newType); +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/lang/invoke/MethodHandles.java b/JCL/converterJclMin21/src/java/lang/invoke/MethodHandles.java new file mode 100644 index 00000000000..582995d9d86 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/invoke/MethodHandles.java @@ -0,0 +1,22 @@ +package java.lang.invoke; +import java.lang.invoke.MethodType; + +public class MethodHandles { + public static final class Lookup { + public MethodHandle findVirtual(Class refc, String name, + MethodType type) throws NoSuchMethodException, + IllegalAccessException { + return null; + } + + public MethodHandle findStatic(Class refc, String name, + MethodType type) throws NoSuchMethodException, + IllegalAccessException { + return null; + } + } + + public static Lookup lookup() { + return null; + } +} diff --git a/JCL/converterJclMin21/src/java/lang/invoke/MethodType.java b/JCL/converterJclMin21/src/java/lang/invoke/MethodType.java new file mode 100644 index 00000000000..90a46dc8fea --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/invoke/MethodType.java @@ -0,0 +1,17 @@ +package java.lang.invoke; + + +public final class MethodType { + public static MethodType methodType(Class rtype, Class ptype0, + Class... ptypes) { + return null; + } + + public static MethodType methodType(Class rtype) { + return null; + } + + public static MethodType genericMethodType(int objectArgCount) { + return null; + } +} diff --git a/JCL/converterJclMin21/src/java/lang/invoke/TypeDescriptor.java b/JCL/converterJclMin21/src/java/lang/invoke/TypeDescriptor.java new file mode 100644 index 00000000000..a5e158d150f --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/invoke/TypeDescriptor.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.lang.invoke; + +import java.util.List; + +public interface TypeDescriptor { + String descriptorString(); +} diff --git a/JCL/converterJclMin21/src/java/lang/runtime/ObjectMethods.java b/JCL/converterJclMin21/src/java/lang/runtime/ObjectMethods.java new file mode 100644 index 00000000000..7587fef8f00 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/runtime/ObjectMethods.java @@ -0,0 +1,14 @@ +package java.lang.runtime; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.TypeDescriptor; + +public class ObjectMethods { + public static Object bootstrap(MethodHandles.Lookup lookup, String methodName, TypeDescriptor type, + Class recordClass, + String names, + MethodHandle... getters) throws Throwable { + return null; + } +} diff --git a/JCL/converterJclMin21/src/java/lang/runtime/SwitchBootstraps.java b/JCL/converterJclMin21/src/java/lang/runtime/SwitchBootstraps.java new file mode 100644 index 00000000000..92896069ada --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/runtime/SwitchBootstraps.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang.runtime; + +public class SwitchBootstraps { +} + diff --git a/JCL/converterJclMin21/src/java/lang/runtime/TemplateRuntime.java b/JCL/converterJclMin21/src/java/lang/runtime/TemplateRuntime.java new file mode 100644 index 00000000000..cf86aaac1f9 --- /dev/null +++ b/JCL/converterJclMin21/src/java/lang/runtime/TemplateRuntime.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package java.lang.runtime; + +public final class TemplateRuntime { +} + diff --git a/JCL/converterJclMin21/src/java/util/Collection.java b/JCL/converterJclMin21/src/java/util/Collection.java new file mode 100644 index 00000000000..c6fb16779ce --- /dev/null +++ b/JCL/converterJclMin21/src/java/util/Collection.java @@ -0,0 +1,9 @@ +package java.util; + +public interface Collection extends Iterable { + public Iterator iterator(); + public int size(); + public T get(int index); + public boolean addAll(Collection c); + public T[] toArray(T[] o); +} diff --git a/JCL/converterJclMin21/src/java/util/Iterator.java b/JCL/converterJclMin21/src/java/util/Iterator.java new file mode 100644 index 00000000000..ae53f8408e0 --- /dev/null +++ b/JCL/converterJclMin21/src/java/util/Iterator.java @@ -0,0 +1,7 @@ +package java.util; + +public interface Iterator { + boolean hasNext(); + E next(); + void remove(); +} diff --git a/JCL/converterJclMin21/src/java/util/List.java b/JCL/converterJclMin21/src/java/util/List.java new file mode 100644 index 00000000000..4565ccb902f --- /dev/null +++ b/JCL/converterJclMin21/src/java/util/List.java @@ -0,0 +1,4 @@ +package java.util; + +public interface List extends Collection { +} diff --git a/JCL/converterJclMin21/src/java/util/Map.java b/JCL/converterJclMin21/src/java/util/Map.java new file mode 100644 index 00000000000..f47752cfdba --- /dev/null +++ b/JCL/converterJclMin21/src/java/util/Map.java @@ -0,0 +1,5 @@ +package java.util; + +public interface Map { + +} \ No newline at end of file diff --git a/JCL/converterJclMin21/src/java/util/function/Consumer.java b/JCL/converterJclMin21/src/java/util/function/Consumer.java new file mode 100644 index 00000000000..dd5b3f408cb --- /dev/null +++ b/JCL/converterJclMin21/src/java/util/function/Consumer.java @@ -0,0 +1,10 @@ +package java.util.function; + +public interface Consumer { + + void accept(T t); + + default Consumer andThen(Consumer after) { + return null; + } +} diff --git a/JCL/converterJclMin21/src/javax/lang/model/SourceVersion.java b/JCL/converterJclMin21/src/javax/lang/model/SourceVersion.java new file mode 100644 index 00000000000..9a02b685c29 --- /dev/null +++ b/JCL/converterJclMin21/src/javax/lang/model/SourceVersion.java @@ -0,0 +1,71 @@ +package javax.lang.model; + +public enum SourceVersion { + + RELEASE_0, + + RELEASE_1, + + RELEASE_2, + + RELEASE_3, + + RELEASE_4, + + RELEASE_5, + + RELEASE_6, + + RELEASE_7, + + RELEASE_8, + RELEASE_9, + + RELEASE_10, + + RELEASE_11, + + RELEASE_12, + + RELEASE_13, + RELEASE_14, + RELEASE_15, + RELEASE_16, + RELEASE_17, + RELEASE_18, + RELEASE_19; + + public static SourceVersion latest() { + return RELEASE_19; + } + + private static final SourceVersion latestSupported = getLatestSupported(); + + private static SourceVersion getLatestSupported() { + return RELEASE_19; + } + + public static SourceVersion latestSupported() { + return latestSupported; + } + + public static boolean isIdentifier(CharSequence name) { + return true; + } + + public static boolean isName(CharSequence name) { + return isName(name, latest()); + } + + public static boolean isName(CharSequence name, SourceVersion version) { + return true; + } + + public static boolean isKeyword(CharSequence s) { + return isKeyword(s, latest()); + } + + public static boolean isKeyword(CharSequence s, SourceVersion version) { + return true; + } +} diff --git a/JCL/converterJclMin21/src/module-info.java b/JCL/converterJclMin21/src/module-info.java new file mode 100644 index 00000000000..51a23b131bc --- /dev/null +++ b/JCL/converterJclMin21/src/module-info.java @@ -0,0 +1,7 @@ +module java.base { + exports java.lang; + exports java.lang.annotation; + exports java.lang.invoke; + exports java.io; + exports java.util; +} \ No newline at end of file diff --git a/org.eclipse.jdt.core.compiler.batch/.settings/.api_filters b/org.eclipse.jdt.core.compiler.batch/.settings/.api_filters deleted file mode 100644 index c9dc07104ab..00000000000 --- a/org.eclipse.jdt.core.compiler.batch/.settings/.api_filters +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF index b92448ea1e5..1820738e644 100644 --- a/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF +++ b/org.eclipse.jdt.core.compiler.batch/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main Bundle-ManifestVersion: 2 Bundle-Name: Eclipse Compiler for Java(TM) Bundle-SymbolicName: org.eclipse.jdt.core.compiler.batch -Bundle-Version: 3.36.100.qualifier +Bundle-Version: 3.37.0.qualifier Bundle-ClassPath: . Bundle-Vendor: Eclipse.org Automatic-Module-Name: org.eclipse.jdt.core.compiler.batch diff --git a/org.eclipse.jdt.core.compiler.batch/grammar/java.g b/org.eclipse.jdt.core.compiler.batch/grammar/java.g index 40ed20beb08..2d7769a46a7 100644 --- a/org.eclipse.jdt.core.compiler.batch/grammar/java.g +++ b/org.eclipse.jdt.core.compiler.batch/grammar/java.g @@ -57,6 +57,8 @@ $Terminals CharacterLiteral StringLiteral TextBlock + StringTemplate + TextBlockTemplate PLUS_PLUS MINUS_MINUS @@ -247,6 +249,7 @@ Literal -> StringLiteral Literal -> TextBlock Literal -> null Literal -> BooleanLiteral + /:$readableName Literal:/ BooleanLiteral -> true BooleanLiteral -> false @@ -1292,6 +1295,33 @@ PatternList ::= PatternList ',' Pattern ----------------------------------------------- -- 20 preview feature : end of record patterns ----------------------------------------------- +----------------------------------------------- +-- 21 preview feature : String templates +----------------------------------------------- + +PrimaryNoNewArray -> StringTemplateExpression + +TemplateArgument -> StringLiteral +TemplateArgument -> TextBlock +TemplateArgument -> StringTemplate +TemplateArgument -> TextBlockTemplate + +StringTemplateExpression ::= Name '.' TemplateArgument +/.$putCase consumeTemplateExpressionWithName(); $break ./ +/:$readableName TemplateExpression:/ +/:$compliance 21:/ + +StringTemplateExpression ::= Primary '.' TemplateArgument +/.$putCase consumeTemplateExpressionWithPrimary(); $break ./ +/:$readableName TemplateExpression:/ +/:$compliance 21:/ + +--TemplateProcessor ::= Expression +--/:$compliance 21:/ + +----------------------------------------------- +-- 21 preview feature : end of String templates +----------------------------------------------- ConstantDeclaration -> FieldDeclaration /:$readableName ConstantDeclaration:/ diff --git a/org.eclipse.jdt.core.compiler.batch/pom.xml b/org.eclipse.jdt.core.compiler.batch/pom.xml index 24e0cb76145..79cfd4e54e7 100644 --- a/org.eclipse.jdt.core.compiler.batch/pom.xml +++ b/org.eclipse.jdt.core.compiler.batch/pom.xml @@ -17,7 +17,7 @@ 4.31.0-SNAPSHOT org.eclipse.jdt.core.compiler.batch - 3.36.100-SNAPSHOT + 3.37.0-SNAPSHOT eclipse-plugin diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ClassFile.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ClassFile.java index c68e2858fcc..db844d9db0a 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ClassFile.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ClassFile.java @@ -79,6 +79,7 @@ import org.eclipse.jdt.internal.compiler.ast.SingleMemberAnnotation; import org.eclipse.jdt.internal.compiler.ast.SingleNameReference; import org.eclipse.jdt.internal.compiler.ast.StringLiteral; +import org.eclipse.jdt.internal.compiler.ast.StringTemplate; import org.eclipse.jdt.internal.compiler.ast.SwitchStatement; import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; import org.eclipse.jdt.internal.compiler.ast.TypeParameter; @@ -201,9 +202,10 @@ public class ClassFile implements TypeConstants, TypeIds { public static final String ENUMDESC_OF = "EnumDesc.of"; //$NON-NLS-1$ public static final String CLASSDESC = "ClassDesc"; //$NON-NLS-1$ public static final String CLASSDESC_OF = "ClassDesc.of"; //$NON-NLS-1$ + public static final String PROCESS_STRING = "process"; //$NON-NLS-1$ + public static final String NEW_STRING_TEMPLATE = "newStringTemplate"; //$NON-NLS-1$ public static final String[] BOOTSTRAP_METHODS = { ALTMETAFACTORY_STRING, METAFACTORY_STRING, BOOTSTRAP_STRING, - TYPESWITCH_STRING, ENUMSWITCH_STRING, CONCAT_CONSTANTS, INVOKE_STRING, ENUMDESC_OF, CLASSDESC, CLASSDESC_OF }; - + TYPESWITCH_STRING, ENUMSWITCH_STRING, CONCAT_CONSTANTS, INVOKE_STRING, ENUMDESC_OF, CLASSDESC, CLASSDESC_OF, PROCESS_STRING, NEW_STRING_TEMPLATE}; /** * INTERNAL USE-ONLY * Request the creation of a ClassFile compatible representation of a problematic type @@ -3667,6 +3669,8 @@ private int generateBootstrapMethods(List bootStrapMethodsList) { localContentsOffset = addBootStrapTypeCaseConstantEntry(localContentsOffset, (ResolvedCase) o, fPtr); } else if (o instanceof TypeBinding) { localContentsOffset = addClassDescBootstrap(localContentsOffset, (TypeBinding) o, fPtr); + } else if (o instanceof StringTemplate template) { + localContentsOffset = addBootStrapTemplateRuntimeEntry(localContentsOffset, template, fPtr); } } @@ -4067,6 +4071,40 @@ private int addBootStrapStringConcatEntry(int localContentsOffset, String recipe return localContentsOffset; } + private int addBootStrapTemplateRuntimeEntry(int localContentsOffset, StringTemplate template, Map fPtr) { + final int contentsEntries = 10; + int indexForProcess = fPtr.get(NEW_STRING_TEMPLATE); + if (contentsEntries + localContentsOffset >= this.contents.length) { + resizeContents(contentsEntries); + } + if (indexForProcess == 0) { + ReferenceBinding javaLangRuntimeTemplateBootstraps = this.referenceBinding.scope.getJavaLangRuntimeTemplateRuntimeBootstraps(); + indexForProcess = this.constantPool.literalIndexForMethodHandle(ClassFileConstants.MethodHandleRefKindInvokeStatic, javaLangRuntimeTemplateBootstraps, + NEW_STRING_TEMPLATE.toCharArray(), ConstantPool.JAVA_LANG_RUNTIME_STRING_TEMPLATE_SIGNATURE, false); + fPtr.put(NEW_STRING_TEMPLATE, indexForProcess); + } + this.contents[localContentsOffset++] = (byte) (indexForProcess >> 8); + this.contents[localContentsOffset++] = (byte) indexForProcess; + + // u2 num_bootstrap_arguments + int numArgsLocation = localContentsOffset; + StringLiteral[] fragments = template.fragments(); + int numArgs = fragments.length; + this.contents[numArgsLocation++] = (byte) (numArgs >> 8); + this.contents[numArgsLocation] = (byte) numArgs; + localContentsOffset += 2; + + if ((numArgs * 2) + localContentsOffset >= this.contents.length) { + resizeContents(numArgs * 2); + } + for (StringLiteral frag : fragments) { + int intValIdx = + this.constantPool.literalIndex(frag.constant.stringValue()); + this.contents[localContentsOffset++] = (byte) (intValIdx >> 8); + this.contents[localContentsOffset++] = (byte) intValIdx; + } + return localContentsOffset; + } private int generateLineNumberAttribute() { int localContentsOffset = this.contentsOffset; int attributesNumber = 0; @@ -6394,6 +6432,13 @@ public int recordBootstrapMethod(String expression) { this.bootstrapMethods.add(expression); return this.bootstrapMethods.size() - 1; } + public int recordBootstrapMethod(StringTemplate template) { + if (this.bootstrapMethods == null) { + this.bootstrapMethods = new ArrayList<>(); + } + this.bootstrapMethods.add(template); + return this.bootstrapMethods.size() - 1; + } public void reset(/*@Nullable*/SourceTypeBinding typeBinding, CompilerOptions options) { // the code stream is reinitialized for each method if (typeBinding != null) { diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringLiteral.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringLiteral.java index f8867283078..ff2036cf6ca 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringLiteral.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringLiteral.java @@ -22,7 +22,7 @@ public class StringLiteral extends Literal { - char[] source; + public char[] source; int lineNumber; public StringLiteral(char[] token, int start, int end, int lineNumber) { diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringTemplate.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringTemplate.java new file mode 100644 index 00000000000..ec0a885dc21 --- /dev/null +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/StringTemplate.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright (c) 2023 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.internal.compiler.ast; + +import org.eclipse.jdt.internal.compiler.codegen.CodeStream; +import org.eclipse.jdt.internal.compiler.codegen.ConstantPool; +import org.eclipse.jdt.internal.compiler.flow.FlowContext; +import org.eclipse.jdt.internal.compiler.flow.FlowInfo; +import org.eclipse.jdt.internal.compiler.lookup.BlockScope; +import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; +import org.eclipse.jdt.internal.compiler.lookup.TypeIds; +import org.eclipse.jdt.internal.compiler.util.Util; + +public class StringTemplate extends Expression { + private StringLiteral[] fragments; + private Expression[] values; + public boolean isMultiline; + public StringTemplate(StringLiteral[] fragments, Expression[] values, int start, int end, boolean isMultiline) { + this.fragments = fragments; + this.values = values; + this.sourceStart = start; + this.sourceEnd = end; + this.isMultiline = isMultiline; + } + + public StringLiteral[] fragments() { + return this.fragments; + } + public Expression[] values() { + return this.values; + } + @Override + public void resolve(BlockScope scope) { + for (StringLiteral frag : this.fragments) { + frag.resolveType(scope); + } + for (Expression exp : this.values) { + if (exp == null) { + continue; + } + exp.resolveType(scope); + } + } + private void generateNewTemplateBootstrap(CodeStream codeStream) { + int index = codeStream.classFile.recordBootstrapMethod(this); + // Kludge, see if this can be moved to CodeStream + codeStream.stackDepth ++; + if (codeStream.stackDepth > codeStream.stackMax) { + codeStream.stackMax = codeStream.stackDepth; + } + StringBuilder signature = new StringBuilder("("); //$NON-NLS-1$ + for (Expression exp : this.values) { + TypeBinding type = exp.resolvedType; + if (type == TypeBinding.NULL) + signature.append(ConstantPool.JavaLangObjectSignature); + else + signature.append(type.signature()); + } + signature.append(")Ljava/lang/StringTemplate;"); //$NON-NLS-1$ + codeStream.invokeDynamic(index, + 1, // + 1, // int + ConstantPool.PROCESS, + signature.toString().toCharArray(), + TypeIds.T_int, + TypeBinding.INT); + } + @Override + public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { + for (Expression exp : this.values) { + flowInfo = exp.analyseCode(currentScope, flowContext, flowInfo).unconditionalInits(); + } + return flowInfo; + } + @Override + public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) { + for (Expression exp : this.values) { + exp.generateCode(currentScope, codeStream, valueRequired); + } + + generateNewTemplateBootstrap(codeStream); + int pc = codeStream.position; + codeStream.recordPositionsFrom(pc, this.sourceStart); + } + @Override + public StringBuilder printExpression(int indent, StringBuilder output) { + int length = this.fragments.length; + output.append('\"'); + for (int i = 0; i < length; i++) { + char[] source = this.fragments[i].source; + for (int j = 0; j < source.length; j++) { + Util.appendEscapedChar(output, source[j], true); + } + if (i + 1 < length) { + output.append("\\{"); //$NON-NLS-1$ + if (this.values[i] != null) { + this.values[i].printExpression(0, output); + } + output.append("}"); //$NON-NLS-1$ + } + } + output.append('\"'); + return output; + } +} diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TemplateExpression.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TemplateExpression.java new file mode 100644 index 00000000000..e5640771690 --- /dev/null +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TemplateExpression.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2023 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.internal.compiler.ast; + +import org.eclipse.jdt.internal.compiler.codegen.CodeStream; +import org.eclipse.jdt.internal.compiler.codegen.ConstantPool; +import org.eclipse.jdt.internal.compiler.flow.FlowContext; +import org.eclipse.jdt.internal.compiler.flow.FlowInfo; +import org.eclipse.jdt.internal.compiler.impl.Constant; +import org.eclipse.jdt.internal.compiler.lookup.BlockScope; +import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; +import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; + +public class TemplateExpression extends Expression { + public Expression processor; + public StringTemplate template; + private MessageSend invocation; + public TemplateExpression(Expression processor, StringTemplate template) { + this.processor = processor; + this.template = template; + this.sourceStart = processor.sourceStart; + this.sourceEnd = template.sourceEnd; + } + @Override + public StringBuilder printExpression(int indent, StringBuilder output) { + this.processor.printExpression(0, output); + output.append("."); //$NON-NLS-1$ + this.template.printExpression(0, output); + return output; + } + + @Override + public TypeBinding resolveType(BlockScope scope) { + this.constant = Constant.NotAConstant; + this.template.resolve(scope); + if (this.processor != null) { + this.invocation = new MessageSend(); + this.invocation.receiver = this.processor; + this.invocation.selector = ConstantPool.PROCESS; + this.invocation.arguments = new Expression[] {this.template}; + this.invocation.resolve(scope); + if (this.invocation.binding != null) { + this.resolvedType = this.invocation.binding.returnType; + } + ReferenceBinding processorBinding = scope.getJavaLangStringTemplateProcessor(); + if (this.processor.resolvedType == null) { + // already reported an error. Just return. + return this.resolvedType; + } + if (!this.processor.resolvedType.isCompatibleWith(processorBinding)) { + scope.problemReporter().typeMismatchError(this.processor.resolvedType, processorBinding, this.processor, null); + return this.resolvedType; + } + } + return this.resolvedType; + } + @Override + public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) { + return this.invocation.analyseCode(currentScope, flowContext, flowInfo); + } + @Override + public void generateCode(BlockScope currentScope, CodeStream codeStream, boolean valueRequired) { + this.invocation.generateCode(currentScope, codeStream, true); + codeStream.checkcast(this.invocation.binding.returnType); + if (!valueRequired) { + codeStream.pop(); + } + } +} diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TextBlock.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TextBlock.java index e092b6de920..714ba2216ff 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TextBlock.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/ast/TextBlock.java @@ -12,13 +12,288 @@ *******************************************************************************/ package org.eclipse.jdt.internal.compiler.ast; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jdt.core.compiler.CharOperation; +import org.eclipse.jdt.core.compiler.InvalidInputException; +import org.eclipse.jdt.internal.compiler.parser.ScannerHelper; + public class TextBlock extends StringLiteral { public int endLineNumber; - public TextBlock(char[] token, int start, int end, int lineNumber, int endLineNumber) { + private TextBlock(char[] token, int start, int end, int lineNumber, int endLineNumber) { super(token, start,end, lineNumber); this.endLineNumber= endLineNumber - 1; // line number is 1 based } - + public static TextBlock createTextBlock(char[] token, int start, int end, int lineNumber, int endLineNumber) { + return new TextBlock(token, start,end, lineNumber, endLineNumber); + } + public static char[][] convertTextBlockToLines(char[] all) { + // 1. Normalize, i.e. convert all CR CRLF to LF + all = normalize(all); + // 2. Split into lines. Consider both \n and \r as line separators + char[][] lines = CharOperation.splitOn('\n', all); + int size = lines.length; + List list = new ArrayList<>(lines.length); + for(int i = 0; i < lines.length; i++) { + char[] line = lines[i]; + if (i + 1 == size && line.length == 0) { + list.add(line); + break; + } + char[][] sub = CharOperation.splitOn('\r', line); + if (sub.length == 0) { + list.add(line); + } else { + for (char[] cs : sub) { + list.add(cs); + } + } + } + size = list.size(); + lines = list.toArray(new char[size][]); + return lines; + } + public static int getTextBlockIndent(char[][] lines) { + int prefix = -1; + int size = lines.length; + for(int i = 0; i < size; i++) { + char[] line = lines[i]; + boolean blank = true; + int whitespaces = 0; + for (char c : line) { + if (blank) { + if (ScannerHelper.isWhitespace(c)) { + whitespaces++; + } else { + blank = false; + } + } + } + // The last line with closing delimiter is part of the + // determining line list even if empty + if (!blank || (i+1 == size)) { + if (prefix < 0 || whitespaces < prefix) { + prefix = whitespaces; + } + } + } + return prefix == -1 ? 0 : prefix; + } + public static int getIndentForFragments(char[][] fragments) { + int prefix = -1; + for(int index = 0; index < fragments.length; index++) { + char[][] lines = convertTextBlockToLines(fragments[index]); + int size = lines.length; + for(int i = 0; i < size; i++) { + if (index > 0 && i == 0) { + continue; + } + char[] line = lines[i]; + boolean blank = true; + int whitespaces = 0; + for (char c : line) { + if (blank) { + if (ScannerHelper.isWhitespace(c)) { + whitespaces++; + } else { + blank = false; + } + } + } + // The last line with closing delimiter is part of the + // determining line list even if empty + if (!blank || (i+1 == size)) { + if (prefix < 0 || whitespaces < prefix) { + prefix = whitespaces; + } + } + } + } + return prefix == -1 ? 0 : prefix; + } + public static char[] formatTextBlock(char[] all, int indent, boolean followsExp, boolean precedesExp) { + char[][] lines = convertTextBlockToLines(all); + return formatTextBlock(lines, indent, followsExp, precedesExp); + } + public static char[] formatTextBlock(char[][] lines, int indent) { + return formatTextBlock(lines, indent, false, false); + } + public static char[] formatTextBlock(char[][] lines, int indent, boolean followsExp, boolean precedesExp) { + // Handle incidental white space + // Split into lines and identify determining lines + // Remove the common white space prefix + // Handle escape sequences that are not already done in getNextToken0() + int size = lines.length; + StringBuilder result = new StringBuilder(); + boolean newLine = false; + for(int i = 0; i < size; i++) { + if (i > 0) + followsExp = false; + char[] l = lines[i]; + int length = l.length; + int prefix = followsExp ? 0 : indent; + // Remove the common prefix from each line + // And remove all trailing whitespace + // Finally append the \n at the end of the line (except the last line) + int trail = length; + // Only the last line is really prefixed to the embedded + // expression in a string template + if (!precedesExp || i < (size -1)) { + for(;trail > 0;) { + if (!ScannerHelper.isWhitespace(l[trail-1])) { + break; + } + trail--; + } + } + if (i >= (size -1)) { + if (newLine) result.append('\n'); + if (trail < prefix) + continue; + newLine = getLineContent(result, l, prefix, trail-1, false, true); + } else { + if (i > 0 && newLine) + result.append('\n'); + if (trail <= prefix) { + newLine = true; + } else { + boolean merge = length > 0 && l[length - 1] == '\\'; + newLine = getLineContent(result, l, prefix, trail-1, merge, false); + } + } + } + return result.toString().toCharArray(); + } + private static char[] normalize(char[] content) { + StringBuilder result = new StringBuilder(); + boolean isCR = false; + for (char c : content) { + switch (c) { + case '\r': + result.append(c); + isCR = true; + break; + case '\n': + if (!isCR) { + result.append(c); + } + isCR = false; + break; + default: + result.append(c); + isCR = false; + break; + } + } + return result.toString().toCharArray(); + } + // This method is for handling the left over escaped characters during the first + // scanning (scanForStringLiteral). Admittedly this goes over the text block + // content again char by char, but this is required in order to correctly + // treat all the white space and line endings + private static boolean getLineContent(StringBuilder result, char[] line, int start, int end, boolean merge, boolean lastLine) { + int lastPointer = 0; + for(int i = start; i < end;) { + char c = line[i]; + if (c != '\\') { + i++; + continue; + } + if (i < end) { + if (lastPointer + 1 <= i) { + result.append(CharOperation.subarray(line, lastPointer == 0 ? start : lastPointer, i)); + } + char next = line[++i]; + switch (next) { + case '\\' : + result.append('\\'); + if (i == end) + merge = false; + break; + case 's' : + result.append(' '); + break; + case '"': + result.append('"'); + break; + case 'b' : + result.append('\b'); + break; + case 'n' : + result.append('\n'); + break; + case 'r' : + result.append('\r'); + break; + case 't' : + result.append('\t'); + break; + case 'f' : + result.append('\f'); + break; + default : + // Direct copy from Scanner#scanEscapeCharacter + int pos = i + 1; + int number = ScannerHelper.getHexadecimalValue(next); + if (number >= 0 && number <= 7) { + boolean zeroToThreeNot = number > 3; + try { + if (pos <= end && ScannerHelper.isDigit(next = line[pos])) { + pos++; + int digit = ScannerHelper.getHexadecimalValue(next); + if (digit >= 0 && digit <= 7) { + number = (number * 8) + digit; + if (pos <= end && ScannerHelper.isDigit(next = line[pos])) { + pos++; + if (zeroToThreeNot) { + // has read \NotZeroToThree OctalDigit Digit --> ignore last character + } else { + digit = ScannerHelper.getHexadecimalValue(next); + if (digit >= 0 && digit <= 7){ // has read \ZeroToThree OctalDigit OctalDigit + number = (number * 8) + digit; + } else { + // has read \ZeroToThree OctalDigit NonOctalDigit --> ignore last character + } + } + } else { + // has read \OctalDigit NonDigit--> ignore last character + } + } else { + // has read \OctalDigit NonOctalDigit--> ignore last character + } + } else { + // has read \OctalDigit --> ignore last character + } + } catch (InvalidInputException e) { + // Unlikely as this has already been processed in scanForStringLiteral() + } + if (number < 255) { + next = (char) number; + } + result.append(next); + lastPointer = i = pos; + continue; + } else { + // Dealing with just '\' + result.append(c); + lastPointer = i; + continue; + } + } + lastPointer = ++i; + } + } + end = merge ? end : end >= line.length ? end : end + 1; + char[] chars = lastPointer == 0 ? + CharOperation.subarray(line, start, end) : + CharOperation.subarray(line, lastPointer, end); + // The below check is because CharOperation.subarray tend to return null when the + // boundaries produce a zero sized char[] + if (chars != null && chars.length > 0) + result.append(chars); + return (!merge && !lastLine); + } } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java index 07da580b0ff..47ad31a8087 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/codegen/ConstantPool.java @@ -326,6 +326,10 @@ public class ConstantPool implements ClassFileConstants, TypeIds { "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)Ljava/lang/Object;".toCharArray(); //$NON-NLS-1$ public static final char[] JAVA_LANG_ENUMDESC_OF_SIGNATURE = "(Ljava/lang/constant/ClassDesc;Ljava/lang/String;)Ljava/lang/Enum$EnumDesc;".toCharArray(); //$NON-NLS-1$ public static final char[] JAVA_LANG_CLASSDESC_OF_SIGNATURE = "(Ljava/lang/String;)Ljava/lang/constant/ClassDesc;".toCharArray(); //$NON-NLS-1$ + public static final char[] JAVA_LANG_RUNTIME_STRING_TEMPLATE_SIGNATURE = + "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/String;)Ljava/lang/invoke/CallSite;".toCharArray(); //$NON-NLS-1$ + + public static final char[] PROCESS = "process".toCharArray(); //$NON-NLS-1$ /** * ConstantPool constructor comment. diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java index 96c057d8ed9..ca8c5b152cc 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java @@ -2227,6 +2227,7 @@ public String toString() { buf.append("\n\t- JDK compliance level: "+ versionFromJdkLevel(this.complianceLevel)); //$NON-NLS-1$ buf.append("\n\t- JDK source level: "+ versionFromJdkLevel(this.sourceLevel)); //$NON-NLS-1$ buf.append("\n\t- JDK target level: "+ versionFromJdkLevel(this.targetJDK)); //$NON-NLS-1$ + buf.append("\n\t- Preview Features: ").append(this.enablePreviewFeatures ? ENABLED : DISABLED); //$NON-NLS-1$ buf.append("\n\t- verbose : ").append(this.verbose ? "ON" : "OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ buf.append("\n\t- produce reference info : ").append(this.produceReferenceInfo ? "ON" : "OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ buf.append("\n\t- parse literal expressions as constants : ").append(this.parseLiteralExpressionsAsConstants ? "ON" : "OFF"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/JavaFeature.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/JavaFeature.java index 8f3b0f7af1c..84d1cc056f2 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/JavaFeature.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/impl/JavaFeature.java @@ -73,6 +73,10 @@ public enum JavaFeature { Messages.bind(Messages.unnamed_classes_and_instance_main_methods), new char[][] {}, true), + STRING_TEMPLATES(ClassFileConstants.JDK21, + Messages.bind(Messages.string_templates), + new char[][] {}, + true), ; final long compliance; diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java index 12430b39da7..28cc0aa0caa 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/CompilationUnitScope.java @@ -230,18 +230,32 @@ void checkAndSetImports() { } // allocate the import array, add java.lang.* by default + ImportBinding[] defaultImports = getDefaultImports(); + boolean importProcessor = defaultImports.length == 2; final int numberOfStatements = this.referenceContext.imports.length; - int numberOfImports = numberOfStatements + 1; + int numberOfImports = numberOfStatements + defaultImports.length; for (int i = 0; i < numberOfStatements; i++) { ImportReference importReference = this.referenceContext.imports[i]; - if (((importReference.bits & ASTNode.OnDemand) != 0) && CharOperation.equals(TypeConstants.JAVA_LANG, importReference.tokens) && !importReference.isStatic()) { - numberOfImports--; - break; + if ((importReference.bits & ASTNode.OnDemand) != 0 && !importReference.isStatic()) { + if (CharOperation.equals(TypeConstants.JAVA_LANG, importReference.tokens)) { + numberOfImports--; + if (!importProcessor) + break; + } + } + if (importProcessor && (importReference.bits & ASTNode.OnDemand) == 0 && importReference.isStatic()){ + if (CharOperation.equals(TypeConstants.JAVA_LANG_STRING_TEMPLATE_STR, importReference.tokens)) { + numberOfImports--; + } } } ImportBinding[] resolvedImports = new ImportBinding[numberOfImports]; - resolvedImports[0] = getDefaultImports()[0]; + resolvedImports[0] = defaultImports[0]; int index = 1; + if (importProcessor) { + resolvedImports[1] = defaultImports[1]; + index = 2; + } Predicate isStaticImport = i -> i.isStatic(); Predicate isNotStaticImport = Predicate.not(isStaticImport); @@ -436,19 +450,34 @@ void faultInImports() { break; } } - + ImportBinding[] defaultImports = getDefaultImports(); + boolean importProcessor = defaultImports.length == 2; // allocate the import array, add java.lang.* by default - int numberOfImports = numberOfStatements + 1; + int numberOfImports = numberOfStatements + 2; for (int i = 0; i < numberOfStatements; i++) { ImportReference importReference = this.referenceContext.imports[i]; - if (((importReference.bits & ASTNode.OnDemand) != 0) && CharOperation.equals(TypeConstants.JAVA_LANG, importReference.tokens) && !importReference.isStatic()) { - numberOfImports--; - break; + if ((importReference.bits & ASTNode.OnDemand) != 0 && !importReference.isStatic()) { + if (CharOperation.equals(TypeConstants.JAVA_LANG, importReference.tokens)) { + numberOfImports--; + if (!importProcessor) + break; + } + } + if (importProcessor && (importReference.bits & ASTNode.OnDemand) == 0 && importReference.isStatic()){ + if (CharOperation.equals(TypeConstants.JAVA_LANG_STRING_TEMPLATE_STR, importReference.tokens)) { + numberOfImports--; + } } } this.tempImports = new ImportBinding[numberOfImports]; - this.tempImports[0] = getDefaultImports()[0]; - this.importPtr = 1; + if (importProcessor) { + this.tempImports[0] = defaultImports[0]; + this.tempImports[1] = defaultImports[1]; + this.importPtr = 2; + } else { + this.tempImports[0] = defaultImports[0]; + this.importPtr = 1; + } CompilerOptions compilerOptions = compilerOptions(); boolean inJdtDebugCompileMode = compilerOptions.enableJdtDebugCompileMode; @@ -736,8 +765,29 @@ ImportBinding[] getDefaultImports() { BinaryTypeBinding missingObject = this.environment.createMissingType(null, TypeConstants.JAVA_LANG_OBJECT); importBinding = missingObject.fPackage; } - - return this.environment.root.defaultImports = new ImportBinding[] {new ImportBinding(TypeConstants.JAVA_LANG, true, importBinding, null)}; + ReferenceBinding templateSTR; + ImportBinding[] allImports = null; + if (this.environment.globalOptions.complianceLevel >= ClassFileConstants.JDK21) { + boolean old = this.environment.globalOptions.isAnnotationBasedNullAnalysisEnabled; + this.environment.globalOptions.isAnnotationBasedNullAnalysisEnabled = false; + templateSTR = (ReferenceBinding) ((PackageBinding) importBinding).getTypeOrPackage(TypeConstants.JAVA_LANG_STRING_TEMPLATE_STR[2], module(), false); + if (templateSTR != null) { + FieldBinding str = templateSTR.getField("STR".toCharArray(), true); //$NON-NLS-1$ + ImportBinding ibinding = new ImportBinding(TypeConstants.JAVA_LANG_STRING_TEMPLATE_STR, false, str, null) { + @Override + public boolean isStatic() { + return true; + } + }; + allImports = new ImportBinding[] { + new ImportBinding(TypeConstants.JAVA_LANG, true, importBinding, null), ibinding}; + } + this.environment.globalOptions.isAnnotationBasedNullAnalysisEnabled = old; + } + if (allImports == null){ + allImports = new ImportBinding[] {new ImportBinding(TypeConstants.JAVA_LANG, true, importBinding, null)}; + } + return this.environment.root.defaultImports = allImports; } // NOT Public API public final Binding getImport(char[][] compoundName, boolean onDemand, boolean isStaticImport) { diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java index 85a29136bc0..86a7cc5b91e 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/Scope.java @@ -2979,6 +2979,11 @@ public final ReferenceBinding getJavaLangInvokeStringConcatFactory() { unitScope.recordQualifiedReference(TypeConstants.JAVA_LANG_INVOKE_STRING_CONCAT_FACTORY); return unitScope.environment.getResolvedJavaBaseType(TypeConstants.JAVA_LANG_INVOKE_STRING_CONCAT_FACTORY, this); } + public final ReferenceBinding getJavaLangRuntimeTemplateRuntimeBootstraps() { + CompilationUnitScope unitScope = compilationUnitScope(); + unitScope.recordQualifiedReference(TypeConstants.JAVA_LANG_RUNTIME_TEMPLATERUNTIME); + return unitScope.environment.getResolvedJavaBaseType(TypeConstants.JAVA_LANG_RUNTIME_TEMPLATERUNTIME, this); + } public final ReferenceBinding getJavaLangInvokeLambdaMetafactory() { CompilationUnitScope unitScope = compilationUnitScope(); unitScope.recordQualifiedReference(TypeConstants.JAVA_LANG_INVOKE_LAMBDAMETAFACTORY); @@ -3058,6 +3063,11 @@ public final ReferenceBinding getJavaLangStringBuilder() { unitScope.recordQualifiedReference(TypeConstants.JAVA_LANG_STRINGBUILDER); return unitScope.environment.getResolvedJavaBaseType(TypeConstants.JAVA_LANG_STRINGBUILDER, this); } + public final ReferenceBinding getJavaLangStringTemplateProcessor() { + CompilationUnitScope unitScope = compilationUnitScope(); + unitScope.recordQualifiedReference(TypeConstants.JAVA_LANG_STRINGTEMPLATE_PROCESSOR); + return unitScope.environment.getResolvedJavaBaseType(TypeConstants.JAVA_LANG_STRINGTEMPLATE_PROCESSOR, this); + } public final ReferenceBinding getJavaLangThrowable() { CompilationUnitScope unitScope = compilationUnitScope(); unitScope.recordQualifiedReference(TypeConstants.JAVA_LANG_THROWABLE); diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java index 8bb961183ff..e92dc1f2631 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/lookup/TypeConstants.java @@ -177,6 +177,8 @@ public interface TypeConstants { char[][] JAVA_LANG_STRING = {JAVA, LANG, "String".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_STRINGBUFFER = {JAVA, LANG, "StringBuffer".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_STRINGBUILDER = {JAVA, LANG, "StringBuilder".toCharArray()}; //$NON-NLS-1$ + char[][] JAVA_LANG_STRINGTEMPLATE = {JAVA, LANG, "StringTemplate".toCharArray()}; //$NON-NLS-1$ + char[][] JAVA_LANG_STRINGTEMPLATE_PROCESSOR = {JAVA, LANG, "StringTemplate$Processor".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_SYSTEM = {JAVA, LANG, "System".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_RUNTIMEEXCEPTION = {JAVA, LANG, "RuntimeException".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_THROWABLE = {JAVA, LANG, "Throwable".toCharArray()}; //$NON-NLS-1$ @@ -259,6 +261,8 @@ public interface TypeConstants { char[][] JAVA_LANG_INVOKE_CONSTANTBOOTSTRAP = {JAVA, LANG, INVOKE, "ConstantBootstraps".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_ENUM_ENUMDESC = {JAVA, LANG, "Enum$EnumDesc".toCharArray()}; //$NON-NLS-1$ char[][] JAVA_LANG_CONSTANT_CLASSDESC = {JAVA, LANG, "constant".toCharArray(), "ClassDesc".toCharArray()}; //$NON-NLS-1$ //$NON-NLS-2$ + char[][] JAVA_LANG_RUNTIME_TEMPLATERUNTIME = {JAVA, LANG, RUNTIME, "TemplateRuntime".toCharArray()}; //$NON-NLS-1$ + char[][] JAVA_LANG_STRING_TEMPLATE_STR = {JAVA, LANG, "StringTemplate".toCharArray(), "STR".toCharArray()}; //$NON-NLS-1$ //$NON-NLS-2$ // known helper functions for closing a Closeable (all receive a Closeable as their first argument): public static class CloseMethodRecord { diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/messages.properties b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/messages.properties index c0167ee88e8..48d440df0f7 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/messages.properties +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/messages.properties @@ -75,4 +75,5 @@ sealed_types = Sealed Types pattern_matching_switch = Pattern Matching in Switch record_patterns = Record Pattern unnammed_patterns_and_vars = Unnammed Patterns and Variables -unnamed_classes_and_instance_main_methods = Unnamed Classes and Instance Main Methods \ No newline at end of file +unnamed_classes_and_instance_main_methods = Unnamed Classes and Instance Main Methods +string_templates = String Template 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 ac2c2995cf5..6aac32af5ab 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 @@ -69,6 +69,9 @@ import org.eclipse.jdt.internal.compiler.lookup.MethodScope; import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; import org.eclipse.jdt.internal.compiler.lookup.TypeIds; +import org.eclipse.jdt.internal.compiler.parser.Scanner.IStringTemplateComponent; +import org.eclipse.jdt.internal.compiler.parser.Scanner.TextFragment; +import org.eclipse.jdt.internal.compiler.parser.Scanner.EmbeddedExpression; import org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser; import org.eclipse.jdt.internal.compiler.problem.AbortCompilation; import org.eclipse.jdt.internal.compiler.problem.AbortCompilationUnit; @@ -4517,6 +4520,32 @@ protected void consumeInsideCastExpressionLL1WithBounds() { protected void consumeInsideCastExpressionWithQualifiedGenerics() { // InsideCastExpressionWithQualifiedGenerics ::= $empty } +private void consumeTemplateExpression(Expression expression, Expression processor) { + StringTemplate template; + if (expression instanceof StringLiteral) { + boolean multiLine = expression instanceof TextBlock; + template = new StringTemplate(new StringLiteral[] {(StringLiteral) expression}, + new Expression[0], expression.sourceStart, expression.sourceEnd, multiLine); + } else { + template = (StringTemplate) expression; + } + TemplateExpression exp = new TemplateExpression( + processor, + template); + exp.sourceStart = processor.sourceStart; + exp.sourceEnd = expression.sourceEnd; + pushOnExpressionStack(exp); +} +protected void consumeTemplateExpressionWithPrimary() { + Expression template = this.expressionStack[this.expressionPtr--]; + Expression processor = this.expressionStack[this.expressionPtr--]; + consumeTemplateExpression(template, processor); +} +protected void consumeTemplateExpressionWithName() { + NameReference processor = getUnspecifiedReference(true); + Expression template = this.expressionStack[this.expressionPtr--]; + consumeTemplateExpression(template, processor); +} protected void consumeInstanceOfExpression() { int length = this.astLengthStack[this.astLengthPtr--]; Expression exp; @@ -6675,2300 +6704,2308 @@ protected void consumeZeroTypeAnnotations() { // BEGIN_AUTOGENERATED_REGION_CONSUME_RULE // This method is part of an automatic generation : do NOT edit-modify protected void consumeRule(int act) { - switch ( act ) { - case 44 : if (DEBUG) { System.out.println("Type ::= PrimitiveType"); } //$NON-NLS-1$ - consumePrimitiveType(); - break; + switch ( act ) { + case 44 : if (DEBUG) { System.out.println("Type ::= PrimitiveType"); } //$NON-NLS-1$ + consumePrimitiveType(); + break; - case 58 : if (DEBUG) { System.out.println("ReferenceType ::= ClassOrInterfaceType"); } //$NON-NLS-1$ - consumeReferenceType(); - break; + case 58 : if (DEBUG) { System.out.println("ReferenceType ::= ClassOrInterfaceType"); } //$NON-NLS-1$ + consumeReferenceType(); + break; - case 62 : if (DEBUG) { System.out.println("ClassOrInterface ::= Name"); } //$NON-NLS-1$ - consumeClassOrInterfaceName(); - break; + case 62 : if (DEBUG) { System.out.println("ClassOrInterface ::= Name"); } //$NON-NLS-1$ + consumeClassOrInterfaceName(); + break; - case 63 : if (DEBUG) { System.out.println("ClassOrInterface ::= GenericType DOT Name"); } //$NON-NLS-1$ - consumeClassOrInterface(); - break; + case 63 : if (DEBUG) { System.out.println("ClassOrInterface ::= GenericType DOT Name"); } //$NON-NLS-1$ + consumeClassOrInterface(); + break; - case 64 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface TypeArguments"); } //$NON-NLS-1$ - consumeGenericType(); - break; + case 64 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface TypeArguments"); } //$NON-NLS-1$ + consumeGenericType(); + break; - case 65 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface LESS GREATER"); } //$NON-NLS-1$ - consumeGenericTypeWithDiamond(); - break; + case 65 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface LESS GREATER"); } //$NON-NLS-1$ + consumeGenericTypeWithDiamond(); + break; - case 66 : if (DEBUG) { System.out.println("ArrayTypeWithTypeArgumentsName ::= GenericType DOT Name"); } //$NON-NLS-1$ - consumeArrayTypeWithTypeArgumentsName(); - break; + case 66 : if (DEBUG) { System.out.println("ArrayTypeWithTypeArgumentsName ::= GenericType DOT Name"); } //$NON-NLS-1$ + consumeArrayTypeWithTypeArgumentsName(); + break; - case 67 : if (DEBUG) { System.out.println("ArrayType ::= PrimitiveType Dims"); } //$NON-NLS-1$ - consumePrimitiveArrayType(); - break; + case 67 : if (DEBUG) { System.out.println("ArrayType ::= PrimitiveType Dims"); } //$NON-NLS-1$ + consumePrimitiveArrayType(); + break; - case 68 : if (DEBUG) { System.out.println("ArrayType ::= Name Dims"); } //$NON-NLS-1$ - consumeNameArrayType(); - break; + case 68 : if (DEBUG) { System.out.println("ArrayType ::= Name Dims"); } //$NON-NLS-1$ + consumeNameArrayType(); + break; - case 69 : if (DEBUG) { System.out.println("ArrayType ::= ArrayTypeWithTypeArgumentsName Dims"); } //$NON-NLS-1$ - consumeGenericTypeNameArrayType(); - break; + case 69 : if (DEBUG) { System.out.println("ArrayType ::= ArrayTypeWithTypeArgumentsName Dims"); } //$NON-NLS-1$ + consumeGenericTypeNameArrayType(); + break; - case 70 : if (DEBUG) { System.out.println("ArrayType ::= GenericType Dims"); } //$NON-NLS-1$ - consumeGenericTypeArrayType(); - break; + case 70 : if (DEBUG) { System.out.println("ArrayType ::= GenericType Dims"); } //$NON-NLS-1$ + consumeGenericTypeArrayType(); + break; - case 72 : if (DEBUG) { System.out.println("Name ::= SimpleName"); } //$NON-NLS-1$ - consumeZeroTypeAnnotations(); - break; + case 72 : if (DEBUG) { System.out.println("Name ::= SimpleName"); } //$NON-NLS-1$ + consumeZeroTypeAnnotations(); + break; - case 77 : if (DEBUG) { System.out.println("UnannotatableName ::= UnannotatableName DOT SimpleName"); } //$NON-NLS-1$ - consumeUnannotatableQualifiedName(); - break; + case 77 : if (DEBUG) { System.out.println("UnannotatableName ::= UnannotatableName DOT SimpleName"); } //$NON-NLS-1$ + consumeUnannotatableQualifiedName(); + break; - case 78 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT SimpleName"); } //$NON-NLS-1$ - consumeQualifiedName(false); - break; + case 78 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT SimpleName"); } //$NON-NLS-1$ + consumeQualifiedName(false); + break; - case 79 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT TypeAnnotations SimpleName"); } //$NON-NLS-1$ - consumeQualifiedName(true); - break; + case 79 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT TypeAnnotations SimpleName"); } //$NON-NLS-1$ + consumeQualifiedName(true); + break; - case 80 : if (DEBUG) { System.out.println("TypeAnnotationsopt ::="); } //$NON-NLS-1$ - consumeZeroTypeAnnotations(); - break; + case 80 : if (DEBUG) { System.out.println("TypeAnnotationsopt ::="); } //$NON-NLS-1$ + consumeZeroTypeAnnotations(); + break; - case 84 : if (DEBUG) { System.out.println("TypeAnnotations0 ::= TypeAnnotations0 TypeAnnotation"); } //$NON-NLS-1$ - consumeOneMoreTypeAnnotation(); - break; + case 84 : if (DEBUG) { System.out.println("TypeAnnotations0 ::= TypeAnnotations0 TypeAnnotation"); } //$NON-NLS-1$ + consumeOneMoreTypeAnnotation(); + break; - case 85 : if (DEBUG) { System.out.println("TypeAnnotation ::= NormalTypeAnnotation"); } //$NON-NLS-1$ - consumeTypeAnnotation(); - break; + case 85 : if (DEBUG) { System.out.println("TypeAnnotation ::= NormalTypeAnnotation"); } //$NON-NLS-1$ + consumeTypeAnnotation(); + break; - case 86 : if (DEBUG) { System.out.println("TypeAnnotation ::= MarkerTypeAnnotation"); } //$NON-NLS-1$ - consumeTypeAnnotation(); - break; + case 86 : if (DEBUG) { System.out.println("TypeAnnotation ::= MarkerTypeAnnotation"); } //$NON-NLS-1$ + consumeTypeAnnotation(); + break; - case 87 : if (DEBUG) { System.out.println("TypeAnnotation ::= SingleMemberTypeAnnotation"); } //$NON-NLS-1$ - consumeTypeAnnotation(); - break; + case 87 : if (DEBUG) { System.out.println("TypeAnnotation ::= SingleMemberTypeAnnotation"); } //$NON-NLS-1$ + consumeTypeAnnotation(); + break; - case 88 : if (DEBUG) { System.out.println("TypeAnnotationName ::= AT308 UnannotatableName"); } //$NON-NLS-1$ - consumeAnnotationName() ; - break; + case 88 : if (DEBUG) { System.out.println("TypeAnnotationName ::= AT308 UnannotatableName"); } //$NON-NLS-1$ + consumeAnnotationName() ; + break; - case 89 : if (DEBUG) { System.out.println("NormalTypeAnnotation ::= TypeAnnotationName LPAREN..."); } //$NON-NLS-1$ - consumeNormalAnnotation(true) ; - break; + case 89 : if (DEBUG) { System.out.println("NormalTypeAnnotation ::= TypeAnnotationName LPAREN..."); } //$NON-NLS-1$ + consumeNormalAnnotation(true) ; + break; - case 90 : if (DEBUG) { System.out.println("MarkerTypeAnnotation ::= TypeAnnotationName"); } //$NON-NLS-1$ - consumeMarkerAnnotation(true) ; - break; + case 90 : if (DEBUG) { System.out.println("MarkerTypeAnnotation ::= TypeAnnotationName"); } //$NON-NLS-1$ + consumeMarkerAnnotation(true) ; + break; - case 91 : if (DEBUG) { System.out.println("SingleMemberTypeAnnotation ::= TypeAnnotationName LPAREN"); } //$NON-NLS-1$ - consumeSingleMemberAnnotation(true) ; - break; + case 91 : if (DEBUG) { System.out.println("SingleMemberTypeAnnotation ::= TypeAnnotationName LPAREN"); } //$NON-NLS-1$ + consumeSingleMemberAnnotation(true) ; + break; - case 92 : if (DEBUG) { System.out.println("RejectTypeAnnotations ::="); } //$NON-NLS-1$ - consumeNonTypeUseName(); - break; + case 92 : if (DEBUG) { System.out.println("RejectTypeAnnotations ::="); } //$NON-NLS-1$ + consumeNonTypeUseName(); + break; - case 93 : if (DEBUG) { System.out.println("PushZeroTypeAnnotations ::="); } //$NON-NLS-1$ - consumeZeroTypeAnnotations(); - break; + case 93 : if (DEBUG) { System.out.println("PushZeroTypeAnnotations ::="); } //$NON-NLS-1$ + consumeZeroTypeAnnotations(); + break; - case 94 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= this"); } //$NON-NLS-1$ - consumeExplicitThisParameter(false); - break; + case 94 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= this"); } //$NON-NLS-1$ + consumeExplicitThisParameter(false); + break; - case 95 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= UnannotatableName DOT this"); } //$NON-NLS-1$ - consumeExplicitThisParameter(true); - break; + case 95 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= UnannotatableName DOT this"); } //$NON-NLS-1$ + consumeExplicitThisParameter(true); + break; - case 96 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= VariableDeclaratorId"); } //$NON-NLS-1$ - consumeVariableDeclaratorIdParameter(); - break; + case 96 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= VariableDeclaratorId"); } //$NON-NLS-1$ + consumeVariableDeclaratorIdParameter(); + break; - case 97 : if (DEBUG) { System.out.println("CompilationUnit ::= EnterCompilationUnit..."); } //$NON-NLS-1$ - consumeCompilationUnit(); - break; + case 97 : if (DEBUG) { System.out.println("CompilationUnit ::= EnterCompilationUnit..."); } //$NON-NLS-1$ + consumeCompilationUnit(); + break; - case 98 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration"); } //$NON-NLS-1$ - consumeInternalCompilationUnit(); - break; + case 98 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration"); } //$NON-NLS-1$ + consumeInternalCompilationUnit(); + break; - case 99 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); } //$NON-NLS-1$ - consumeInternalCompilationUnit(); - break; + case 99 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); } //$NON-NLS-1$ + consumeInternalCompilationUnit(); + break; - case 100 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); } //$NON-NLS-1$ - consumeInternalCompilationUnitWithTypes(); - break; + case 100 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); } //$NON-NLS-1$ + consumeInternalCompilationUnitWithTypes(); + break; - case 101 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); } //$NON-NLS-1$ - consumeInternalCompilationUnitWithTypes(); - break; + case 101 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); } //$NON-NLS-1$ + consumeInternalCompilationUnitWithTypes(); + break; - case 102 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); } //$NON-NLS-1$ - consumeInternalCompilationUnit(); - break; + case 102 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); } //$NON-NLS-1$ + consumeInternalCompilationUnit(); + break; - case 103 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= TypeDeclarations"); } //$NON-NLS-1$ - consumeInternalCompilationUnitWithTypes(); - break; + case 103 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= TypeDeclarations"); } //$NON-NLS-1$ + consumeInternalCompilationUnitWithTypes(); + break; - case 104 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); } //$NON-NLS-1$ - consumeInternalCompilationUnitWithTypes(); - break; + case 104 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); } //$NON-NLS-1$ + consumeInternalCompilationUnitWithTypes(); + break; - case 105 : if (DEBUG) { System.out.println("InternalCompilationUnit ::="); } //$NON-NLS-1$ - consumeEmptyInternalCompilationUnit(); - break; + case 105 : if (DEBUG) { System.out.println("InternalCompilationUnit ::="); } //$NON-NLS-1$ + consumeEmptyInternalCompilationUnit(); + break; - case 106 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); } //$NON-NLS-1$ - consumeInternalCompilationUnitWithModuleDeclaration(); - break; + case 106 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); } //$NON-NLS-1$ + consumeInternalCompilationUnitWithModuleDeclaration(); + break; - case 107 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ModuleDeclaration"); } //$NON-NLS-1$ - consumeInternalCompilationUnitWithModuleDeclaration(); - break; + case 107 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ModuleDeclaration"); } //$NON-NLS-1$ + consumeInternalCompilationUnitWithModuleDeclaration(); + break; - case 108 : if (DEBUG) { System.out.println("ModuleDeclaration ::= ModuleHeader ModuleBody"); } //$NON-NLS-1$ - consumeModuleDeclaration(); - break; + case 108 : if (DEBUG) { System.out.println("ModuleDeclaration ::= ModuleHeader ModuleBody"); } //$NON-NLS-1$ + consumeModuleDeclaration(); + break; - case 109 : if (DEBUG) { System.out.println("ModuleHeader ::= Modifiersopt ModuleModifieropt module"); } //$NON-NLS-1$ - consumeModuleHeader(); - break; + case 109 : if (DEBUG) { System.out.println("ModuleHeader ::= Modifiersopt ModuleModifieropt module"); } //$NON-NLS-1$ + consumeModuleHeader(); + break; - case 111 : if (DEBUG) { System.out.println("ModuleModifieropt ::= ModuleModifier"); } //$NON-NLS-1$ - consumeModuleModifiers(); - break; + case 111 : if (DEBUG) { System.out.println("ModuleModifieropt ::= ModuleModifier"); } //$NON-NLS-1$ + consumeModuleModifiers(); + break; - case 114 : if (DEBUG) { System.out.println("ModuleStatementsOpt ::="); } //$NON-NLS-1$ - consumeEmptyModuleStatementsOpt(); - break; + case 114 : if (DEBUG) { System.out.println("ModuleStatementsOpt ::="); } //$NON-NLS-1$ + consumeEmptyModuleStatementsOpt(); + break; - case 117 : if (DEBUG) { System.out.println("ModuleStatements ::= ModuleStatements ModuleStatement"); } //$NON-NLS-1$ - consumeModuleStatements(); - break; + case 117 : if (DEBUG) { System.out.println("ModuleStatements ::= ModuleStatements ModuleStatement"); } //$NON-NLS-1$ + consumeModuleStatements(); + break; - case 123 : if (DEBUG) { System.out.println("RequiresStatement ::= SingleRequiresModuleName SEMICOLON"); } //$NON-NLS-1$ - consumeRequiresStatement(); - break; + case 123 : if (DEBUG) { System.out.println("RequiresStatement ::= SingleRequiresModuleName SEMICOLON"); } //$NON-NLS-1$ + consumeRequiresStatement(); + break; - case 124 : if (DEBUG) { System.out.println("SingleRequiresModuleName ::= requires..."); } //$NON-NLS-1$ - consumeSingleRequiresModuleName(); - break; + case 124 : if (DEBUG) { System.out.println("SingleRequiresModuleName ::= requires..."); } //$NON-NLS-1$ + consumeSingleRequiresModuleName(); + break; - case 125 : if (DEBUG) { System.out.println("RequiresModifiersopt ::= RequiresModifiers"); } //$NON-NLS-1$ - consumeModifiers(); - break; + case 125 : if (DEBUG) { System.out.println("RequiresModifiersopt ::= RequiresModifiers"); } //$NON-NLS-1$ + consumeModifiers(); + break; - case 126 : if (DEBUG) { System.out.println("RequiresModifiersopt ::="); } //$NON-NLS-1$ - consumeDefaultModifiers(); - break; + case 126 : if (DEBUG) { System.out.println("RequiresModifiersopt ::="); } //$NON-NLS-1$ + consumeDefaultModifiers(); + break; - case 128 : if (DEBUG) { System.out.println("RequiresModifiers ::= RequiresModifiers RequiresModifier"); } //$NON-NLS-1$ - consumeModifiers2(); - break; + case 128 : if (DEBUG) { System.out.println("RequiresModifiers ::= RequiresModifiers RequiresModifier"); } //$NON-NLS-1$ + consumeModifiers2(); + break; - case 131 : if (DEBUG) { System.out.println("ExportsStatement ::= ExportsHeader TargetModuleListopt"); } //$NON-NLS-1$ - consumeExportsStatement(); - break; + case 131 : if (DEBUG) { System.out.println("ExportsStatement ::= ExportsHeader TargetModuleListopt"); } //$NON-NLS-1$ + consumeExportsStatement(); + break; - case 132 : if (DEBUG) { System.out.println("ExportsHeader ::= exports SinglePkgName"); } //$NON-NLS-1$ - consumeExportsHeader(); - break; + case 132 : if (DEBUG) { System.out.println("ExportsHeader ::= exports SinglePkgName"); } //$NON-NLS-1$ + consumeExportsHeader(); + break; - case 134 : if (DEBUG) { System.out.println("TargetModuleListopt ::= to TargetModuleNameList"); } //$NON-NLS-1$ - consumeTargetModuleList(); - break; + case 134 : if (DEBUG) { System.out.println("TargetModuleListopt ::= to TargetModuleNameList"); } //$NON-NLS-1$ + consumeTargetModuleList(); + break; - case 135 : if (DEBUG) { System.out.println("TargetModuleName ::= UnannotatableName"); } //$NON-NLS-1$ - consumeSingleTargetModuleName(); - break; + case 135 : if (DEBUG) { System.out.println("TargetModuleName ::= UnannotatableName"); } //$NON-NLS-1$ + consumeSingleTargetModuleName(); + break; - case 137 : if (DEBUG) { System.out.println("TargetModuleNameList ::= TargetModuleNameList COMMA..."); } //$NON-NLS-1$ - consumeTargetModuleNameList(); - break; + case 137 : if (DEBUG) { System.out.println("TargetModuleNameList ::= TargetModuleNameList COMMA..."); } //$NON-NLS-1$ + consumeTargetModuleNameList(); + break; - case 138 : if (DEBUG) { System.out.println("SinglePkgName ::= UnannotatableName"); } //$NON-NLS-1$ - consumeSinglePkgName(); - break; + case 138 : if (DEBUG) { System.out.println("SinglePkgName ::= UnannotatableName"); } //$NON-NLS-1$ + consumeSinglePkgName(); + break; - case 139 : if (DEBUG) { System.out.println("OpensStatement ::= OpensHeader TargetModuleListopt..."); } //$NON-NLS-1$ - consumeOpensStatement(); - break; + case 139 : if (DEBUG) { System.out.println("OpensStatement ::= OpensHeader TargetModuleListopt..."); } //$NON-NLS-1$ + consumeOpensStatement(); + break; - case 140 : if (DEBUG) { System.out.println("OpensHeader ::= opens SinglePkgName"); } //$NON-NLS-1$ - consumeOpensHeader(); - break; + case 140 : if (DEBUG) { System.out.println("OpensHeader ::= opens SinglePkgName"); } //$NON-NLS-1$ + consumeOpensHeader(); + break; - case 141 : if (DEBUG) { System.out.println("UsesStatement ::= UsesHeader SEMICOLON"); } //$NON-NLS-1$ - consumeUsesStatement(); - break; + case 141 : if (DEBUG) { System.out.println("UsesStatement ::= UsesHeader SEMICOLON"); } //$NON-NLS-1$ + consumeUsesStatement(); + break; - case 142 : if (DEBUG) { System.out.println("UsesHeader ::= uses Name"); } //$NON-NLS-1$ - consumeUsesHeader(); - break; + case 142 : if (DEBUG) { System.out.println("UsesHeader ::= uses Name"); } //$NON-NLS-1$ + consumeUsesHeader(); + break; - case 143 : if (DEBUG) { System.out.println("ProvidesStatement ::= ProvidesInterface WithClause..."); } //$NON-NLS-1$ - consumeProvidesStatement(); - break; + case 143 : if (DEBUG) { System.out.println("ProvidesStatement ::= ProvidesInterface WithClause..."); } //$NON-NLS-1$ + consumeProvidesStatement(); + break; - case 144 : if (DEBUG) { System.out.println("ProvidesInterface ::= provides Name"); } //$NON-NLS-1$ - consumeProvidesInterface(); - break; + case 144 : if (DEBUG) { System.out.println("ProvidesInterface ::= provides Name"); } //$NON-NLS-1$ + consumeProvidesInterface(); + break; - case 145 : if (DEBUG) { System.out.println("ServiceImplName ::= Name"); } //$NON-NLS-1$ - consumeSingleServiceImplName(); - break; + case 145 : if (DEBUG) { System.out.println("ServiceImplName ::= Name"); } //$NON-NLS-1$ + consumeSingleServiceImplName(); + break; - case 147 : if (DEBUG) { System.out.println("ServiceImplNameList ::= ServiceImplNameList COMMA..."); } //$NON-NLS-1$ - consumeServiceImplNameList(); - break; + case 147 : if (DEBUG) { System.out.println("ServiceImplNameList ::= ServiceImplNameList COMMA..."); } //$NON-NLS-1$ + consumeServiceImplNameList(); + break; - case 148 : if (DEBUG) { System.out.println("WithClause ::= with ServiceImplNameList"); } //$NON-NLS-1$ - consumeWithClause(); - break; + case 148 : if (DEBUG) { System.out.println("WithClause ::= with ServiceImplNameList"); } //$NON-NLS-1$ + consumeWithClause(); + break; - case 149 : if (DEBUG) { System.out.println("ReduceImports ::="); } //$NON-NLS-1$ - consumeReduceImports(); - break; + case 149 : if (DEBUG) { System.out.println("ReduceImports ::="); } //$NON-NLS-1$ + consumeReduceImports(); + break; - case 150 : if (DEBUG) { System.out.println("EnterCompilationUnit ::="); } //$NON-NLS-1$ - consumeEnterCompilationUnit(); - break; + case 150 : if (DEBUG) { System.out.println("EnterCompilationUnit ::="); } //$NON-NLS-1$ + consumeEnterCompilationUnit(); + break; - case 173 : if (DEBUG) { System.out.println("CatchHeader ::= catch LPAREN CatchFormalParameter RPAREN"); } //$NON-NLS-1$ - consumeCatchHeader(); - break; + case 173 : if (DEBUG) { System.out.println("CatchHeader ::= catch LPAREN CatchFormalParameter RPAREN"); } //$NON-NLS-1$ + consumeCatchHeader(); + break; - case 175 : if (DEBUG) { System.out.println("ImportDeclarations ::= ImportDeclarations..."); } //$NON-NLS-1$ - consumeImportDeclarations(); - break; + case 175 : if (DEBUG) { System.out.println("ImportDeclarations ::= ImportDeclarations..."); } //$NON-NLS-1$ + consumeImportDeclarations(); + break; - case 177 : if (DEBUG) { System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration"); } //$NON-NLS-1$ - consumeTypeDeclarations(); - break; + case 177 : if (DEBUG) { System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration"); } //$NON-NLS-1$ + consumeTypeDeclarations(); + break; - case 178 : if (DEBUG) { System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON"); } //$NON-NLS-1$ - consumePackageDeclaration(); - break; + case 178 : if (DEBUG) { System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON"); } //$NON-NLS-1$ + consumePackageDeclaration(); + break; - case 179 : if (DEBUG) { System.out.println("PackageDeclarationName ::= Modifiers package..."); } //$NON-NLS-1$ - consumePackageDeclarationNameWithModifiers(); - break; + case 179 : if (DEBUG) { System.out.println("PackageDeclarationName ::= Modifiers package..."); } //$NON-NLS-1$ + consumePackageDeclarationNameWithModifiers(); + break; - case 180 : if (DEBUG) { System.out.println("PackageDeclarationName ::= PackageComment package Name"); } //$NON-NLS-1$ - consumePackageDeclarationName(); - break; + case 180 : if (DEBUG) { System.out.println("PackageDeclarationName ::= PackageComment package Name"); } //$NON-NLS-1$ + consumePackageDeclarationName(); + break; - case 181 : if (DEBUG) { System.out.println("PackageComment ::="); } //$NON-NLS-1$ - consumePackageComment(); - break; + case 181 : if (DEBUG) { System.out.println("PackageComment ::="); } //$NON-NLS-1$ + consumePackageComment(); + break; - case 186 : if (DEBUG) { System.out.println("SingleTypeImportDeclaration ::=..."); } //$NON-NLS-1$ - consumeImportDeclaration(); - break; + case 186 : if (DEBUG) { System.out.println("SingleTypeImportDeclaration ::=..."); } //$NON-NLS-1$ + consumeImportDeclaration(); + break; - case 187 : if (DEBUG) { System.out.println("SingleTypeImportDeclarationName ::= import Name..."); } //$NON-NLS-1$ - consumeSingleTypeImportDeclarationName(); - break; + case 187 : if (DEBUG) { System.out.println("SingleTypeImportDeclarationName ::= import Name..."); } //$NON-NLS-1$ + consumeSingleTypeImportDeclarationName(); + break; - case 188 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclaration ::=..."); } //$NON-NLS-1$ - consumeImportDeclaration(); - break; + case 188 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclaration ::=..."); } //$NON-NLS-1$ + consumeImportDeclaration(); + break; - case 189 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT..."); } //$NON-NLS-1$ - consumeTypeImportOnDemandDeclarationName(); - break; + case 189 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT..."); } //$NON-NLS-1$ + consumeTypeImportOnDemandDeclarationName(); + break; - case 192 : if (DEBUG) { System.out.println("TypeDeclaration ::= SEMICOLON"); } //$NON-NLS-1$ - consumeEmptyTypeDeclaration(); - break; + case 192 : if (DEBUG) { System.out.println("TypeDeclaration ::= SEMICOLON"); } //$NON-NLS-1$ + consumeEmptyTypeDeclaration(); + break; - case 197 : if (DEBUG) { System.out.println("Modifiers ::= Modifiers Modifier"); } //$NON-NLS-1$ - consumeModifiers2(); - break; + case 197 : if (DEBUG) { System.out.println("Modifiers ::= Modifiers Modifier"); } //$NON-NLS-1$ + consumeModifiers2(); + break; - case 211 : if (DEBUG) { System.out.println("Modifier ::= Annotation"); } //$NON-NLS-1$ - consumeAnnotationAsModifier(); - break; + case 211 : if (DEBUG) { System.out.println("Modifier ::= Annotation"); } //$NON-NLS-1$ + consumeAnnotationAsModifier(); + break; - case 212 : if (DEBUG) { System.out.println("ClassDeclaration ::= ClassHeader ClassBody"); } //$NON-NLS-1$ - consumeClassDeclaration(); - break; + case 212 : if (DEBUG) { System.out.println("ClassDeclaration ::= ClassHeader ClassBody"); } //$NON-NLS-1$ + consumeClassDeclaration(); + break; - case 213 : if (DEBUG) { System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt..."); } //$NON-NLS-1$ - consumeClassHeader(); - break; + case 213 : if (DEBUG) { System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt..."); } //$NON-NLS-1$ + consumeClassHeader(); + break; - case 214 : if (DEBUG) { System.out.println("ClassHeaderName ::= ClassHeaderName1 TypeParameters"); } //$NON-NLS-1$ - consumeTypeHeaderNameWithTypeParameters(); - break; + case 214 : if (DEBUG) { System.out.println("ClassHeaderName ::= ClassHeaderName1 TypeParameters"); } //$NON-NLS-1$ + consumeTypeHeaderNameWithTypeParameters(); + break; - case 216 : if (DEBUG) { System.out.println("ClassHeaderName1 ::= Modifiersopt class Identifier"); } //$NON-NLS-1$ - consumeClassHeaderName1(); - break; + case 216 : if (DEBUG) { System.out.println("ClassHeaderName1 ::= Modifiersopt class Identifier"); } //$NON-NLS-1$ + consumeClassHeaderName1(); + break; - case 217 : if (DEBUG) { System.out.println("ClassHeaderExtends ::= extends ClassType"); } //$NON-NLS-1$ - consumeClassHeaderExtends(); - break; + case 217 : if (DEBUG) { System.out.println("ClassHeaderExtends ::= extends ClassType"); } //$NON-NLS-1$ + consumeClassHeaderExtends(); + break; - case 218 : if (DEBUG) { System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList"); } //$NON-NLS-1$ - consumeClassHeaderImplements(); - break; + case 218 : if (DEBUG) { System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList"); } //$NON-NLS-1$ + consumeClassHeaderImplements(); + break; - case 220 : if (DEBUG) { System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA..."); } //$NON-NLS-1$ - consumeInterfaceTypeList(); - break; + case 220 : if (DEBUG) { System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA..."); } //$NON-NLS-1$ + consumeInterfaceTypeList(); + break; - case 221 : if (DEBUG) { System.out.println("InterfaceType ::= ClassOrInterfaceType"); } //$NON-NLS-1$ - consumeInterfaceType(); - break; + case 221 : if (DEBUG) { System.out.println("InterfaceType ::= ClassOrInterfaceType"); } //$NON-NLS-1$ + consumeInterfaceType(); + break; - case 224 : if (DEBUG) { System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations..."); } //$NON-NLS-1$ - consumeClassBodyDeclarations(); - break; + case 224 : if (DEBUG) { System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations..."); } //$NON-NLS-1$ + consumeClassBodyDeclarations(); + break; - case 228 : if (DEBUG) { System.out.println("ClassBodyDeclaration ::= Diet NestedMethod..."); } //$NON-NLS-1$ - consumeClassBodyDeclaration(); - break; + case 228 : if (DEBUG) { System.out.println("ClassBodyDeclaration ::= Diet NestedMethod..."); } //$NON-NLS-1$ + consumeClassBodyDeclaration(); + break; - case 229 : if (DEBUG) { System.out.println("Diet ::="); } //$NON-NLS-1$ - consumeDiet(); - break; + case 229 : if (DEBUG) { System.out.println("Diet ::="); } //$NON-NLS-1$ + consumeDiet(); + break; - case 230 : if (DEBUG) { System.out.println("Initializer ::= Diet NestedMethod CreateInitializer..."); } //$NON-NLS-1$ - consumeClassBodyDeclaration(); - break; + case 230 : if (DEBUG) { System.out.println("Initializer ::= Diet NestedMethod CreateInitializer..."); } //$NON-NLS-1$ + consumeClassBodyDeclaration(); + break; - case 231 : if (DEBUG) { System.out.println("CreateInitializer ::="); } //$NON-NLS-1$ - consumeCreateInitializer(); - break; + case 231 : if (DEBUG) { System.out.println("CreateInitializer ::="); } //$NON-NLS-1$ + consumeCreateInitializer(); + break; - case 239 : if (DEBUG) { System.out.println("ClassMemberDeclaration ::= SEMICOLON"); } //$NON-NLS-1$ - consumeEmptyTypeDeclaration(); - break; + case 239 : if (DEBUG) { System.out.println("ClassMemberDeclaration ::= SEMICOLON"); } //$NON-NLS-1$ + consumeEmptyTypeDeclaration(); + break; - case 242 : if (DEBUG) { System.out.println("FieldDeclaration ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeFieldDeclaration(); - break; + case 242 : if (DEBUG) { System.out.println("FieldDeclaration ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeFieldDeclaration(); + break; - case 244 : if (DEBUG) { System.out.println("VariableDeclarators ::= VariableDeclarators COMMA..."); } //$NON-NLS-1$ - consumeVariableDeclarators(); - break; + case 244 : if (DEBUG) { System.out.println("VariableDeclarators ::= VariableDeclarators COMMA..."); } //$NON-NLS-1$ + consumeVariableDeclarators(); + break; - case 247 : if (DEBUG) { System.out.println("EnterVariable ::="); } //$NON-NLS-1$ - consumeEnterVariable(); - break; + case 247 : if (DEBUG) { System.out.println("EnterVariable ::="); } //$NON-NLS-1$ + consumeEnterVariable(); + break; - case 248 : if (DEBUG) { System.out.println("ExitVariableWithInitialization ::="); } //$NON-NLS-1$ - consumeExitVariableWithInitialization(); - break; + case 248 : if (DEBUG) { System.out.println("ExitVariableWithInitialization ::="); } //$NON-NLS-1$ + consumeExitVariableWithInitialization(); + break; - case 249 : if (DEBUG) { System.out.println("ExitVariableWithoutInitialization ::="); } //$NON-NLS-1$ - consumeExitVariableWithoutInitialization(); - break; + case 249 : if (DEBUG) { System.out.println("ExitVariableWithoutInitialization ::="); } //$NON-NLS-1$ + consumeExitVariableWithoutInitialization(); + break; - case 250 : if (DEBUG) { System.out.println("ForceNoDiet ::="); } //$NON-NLS-1$ - consumeForceNoDiet(); - break; + case 250 : if (DEBUG) { System.out.println("ForceNoDiet ::="); } //$NON-NLS-1$ + consumeForceNoDiet(); + break; - case 251 : if (DEBUG) { System.out.println("RestoreDiet ::="); } //$NON-NLS-1$ - consumeRestoreDiet(); - break; + case 251 : if (DEBUG) { System.out.println("RestoreDiet ::="); } //$NON-NLS-1$ + consumeRestoreDiet(); + break; - case 256 : if (DEBUG) { System.out.println("MethodDeclaration ::= MethodHeader MethodBody"); } //$NON-NLS-1$ - // set to true to consume a method with a body - consumeMethodDeclaration(true, false); - break; + case 256 : if (DEBUG) { System.out.println("MethodDeclaration ::= MethodHeader MethodBody"); } //$NON-NLS-1$ + // set to true to consume a method with a body + consumeMethodDeclaration(true, false); + break; - case 257 : if (DEBUG) { System.out.println("MethodDeclaration ::= DefaultMethodHeader MethodBody"); } //$NON-NLS-1$ - // set to true to consume a method with a body - consumeMethodDeclaration(true, true); - break; + case 257 : if (DEBUG) { System.out.println("MethodDeclaration ::= DefaultMethodHeader MethodBody"); } //$NON-NLS-1$ + // set to true to consume a method with a body + consumeMethodDeclaration(true, true); + break; - case 258 : if (DEBUG) { System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON"); } //$NON-NLS-1$ - // set to false to consume a method without body - consumeMethodDeclaration(false, false); - break; + case 258 : if (DEBUG) { System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON"); } //$NON-NLS-1$ + // set to false to consume a method without body + consumeMethodDeclaration(false, false); + break; - case 259 : if (DEBUG) { System.out.println("MethodHeader ::= MethodHeaderName FormalParameterListopt"); } //$NON-NLS-1$ - consumeMethodHeader(); - break; + case 259 : if (DEBUG) { System.out.println("MethodHeader ::= MethodHeaderName FormalParameterListopt"); } //$NON-NLS-1$ + consumeMethodHeader(); + break; - case 260 : if (DEBUG) { System.out.println("DefaultMethodHeader ::= DefaultMethodHeaderName..."); } //$NON-NLS-1$ - consumeMethodHeader(); - break; + case 260 : if (DEBUG) { System.out.println("DefaultMethodHeader ::= DefaultMethodHeaderName..."); } //$NON-NLS-1$ + consumeMethodHeader(); + break; - case 261 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt TypeParameters Type..."); } //$NON-NLS-1$ - consumeMethodHeaderNameWithTypeParameters(false); - break; + case 261 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt TypeParameters Type..."); } //$NON-NLS-1$ + consumeMethodHeaderNameWithTypeParameters(false); + break; - case 262 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN"); } //$NON-NLS-1$ - consumeMethodHeaderName(false); - break; + case 262 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN"); } //$NON-NLS-1$ + consumeMethodHeaderName(false); + break; - case 263 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault..."); } //$NON-NLS-1$ - consumeMethodHeaderNameWithTypeParameters(false); - break; + case 263 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault..."); } //$NON-NLS-1$ + consumeMethodHeaderNameWithTypeParameters(false); + break; - case 264 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault Type..."); } //$NON-NLS-1$ - consumeMethodHeaderName(false); - break; + case 264 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault Type..."); } //$NON-NLS-1$ + consumeMethodHeaderName(false); + break; - case 265 : if (DEBUG) { System.out.println("ModifiersWithDefault ::= Modifiersopt default..."); } //$NON-NLS-1$ - consumePushCombineModifiers(); - break; + case 265 : if (DEBUG) { System.out.println("ModifiersWithDefault ::= Modifiersopt default..."); } //$NON-NLS-1$ + consumePushCombineModifiers(); + break; - case 266 : if (DEBUG) { System.out.println("MethodHeaderRightParen ::= RPAREN"); } //$NON-NLS-1$ - consumeMethodHeaderRightParen(); - break; + case 266 : if (DEBUG) { System.out.println("MethodHeaderRightParen ::= RPAREN"); } //$NON-NLS-1$ + consumeMethodHeaderRightParen(); + break; - case 267 : if (DEBUG) { System.out.println("MethodHeaderExtendedDims ::= Dimsopt"); } //$NON-NLS-1$ - consumeMethodHeaderExtendedDims(); - break; + case 267 : if (DEBUG) { System.out.println("MethodHeaderExtendedDims ::= Dimsopt"); } //$NON-NLS-1$ + consumeMethodHeaderExtendedDims(); + break; - case 268 : if (DEBUG) { System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList"); } //$NON-NLS-1$ - consumeMethodHeaderThrowsClause(); - break; + case 268 : if (DEBUG) { System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList"); } //$NON-NLS-1$ + consumeMethodHeaderThrowsClause(); + break; - case 269 : if (DEBUG) { System.out.println("ConstructorHeader ::= ConstructorHeaderName..."); } //$NON-NLS-1$ - consumeConstructorHeader(); - break; + case 269 : if (DEBUG) { System.out.println("ConstructorHeader ::= ConstructorHeaderName..."); } //$NON-NLS-1$ + consumeConstructorHeader(); + break; - case 270 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt TypeParameters..."); } //$NON-NLS-1$ - consumeConstructorHeaderNameWithTypeParameters(); - break; + case 270 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt TypeParameters..."); } //$NON-NLS-1$ + consumeConstructorHeaderNameWithTypeParameters(); + break; - case 271 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN"); } //$NON-NLS-1$ - consumeConstructorHeaderName(); - break; + case 271 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN"); } //$NON-NLS-1$ + consumeConstructorHeaderName(); + break; - case 273 : if (DEBUG) { System.out.println("FormalParameterList ::= FormalParameterList COMMA..."); } //$NON-NLS-1$ - consumeFormalParameterList(); - break; + case 273 : if (DEBUG) { System.out.println("FormalParameterList ::= FormalParameterList COMMA..."); } //$NON-NLS-1$ + consumeFormalParameterList(); + break; - case 274 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeFormalParameter(false); - break; + case 274 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeFormalParameter(false); + break; - case 275 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeFormalParameter(true); - break; + case 275 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeFormalParameter(true); + break; - case 276 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type AT308DOTDOTDOT..."); } //$NON-NLS-1$ - consumeFormalParameter(true); - break; + case 276 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type AT308DOTDOTDOT..."); } //$NON-NLS-1$ + consumeFormalParameter(true); + break; - case 277 : if (DEBUG) { System.out.println("CatchFormalParameter ::= Modifiersopt CatchType..."); } //$NON-NLS-1$ - consumeCatchFormalParameter(); - break; + case 277 : if (DEBUG) { System.out.println("CatchFormalParameter ::= Modifiersopt CatchType..."); } //$NON-NLS-1$ + consumeCatchFormalParameter(); + break; - case 278 : if (DEBUG) { System.out.println("CatchType ::= UnionType"); } //$NON-NLS-1$ - consumeCatchType(); - break; + case 278 : if (DEBUG) { System.out.println("CatchType ::= UnionType"); } //$NON-NLS-1$ + consumeCatchType(); + break; - case 279 : if (DEBUG) { System.out.println("UnionType ::= Type"); } //$NON-NLS-1$ - consumeUnionTypeAsClassType(); - break; + case 279 : if (DEBUG) { System.out.println("UnionType ::= Type"); } //$NON-NLS-1$ + consumeUnionTypeAsClassType(); + break; - case 280 : if (DEBUG) { System.out.println("UnionType ::= UnionType OR Type"); } //$NON-NLS-1$ - consumeUnionType(); - break; + case 280 : if (DEBUG) { System.out.println("UnionType ::= UnionType OR Type"); } //$NON-NLS-1$ + consumeUnionType(); + break; - case 282 : if (DEBUG) { System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt"); } //$NON-NLS-1$ - consumeClassTypeList(); - break; + case 282 : if (DEBUG) { System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt"); } //$NON-NLS-1$ + consumeClassTypeList(); + break; - case 283 : if (DEBUG) { System.out.println("ClassTypeElt ::= ClassType"); } //$NON-NLS-1$ - consumeClassTypeElt(); - break; + case 283 : if (DEBUG) { System.out.println("ClassTypeElt ::= ClassType"); } //$NON-NLS-1$ + consumeClassTypeElt(); + break; - case 284 : if (DEBUG) { System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt..."); } //$NON-NLS-1$ - consumeMethodBody(); - break; + case 284 : if (DEBUG) { System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt..."); } //$NON-NLS-1$ + consumeMethodBody(); + break; - case 285 : if (DEBUG) { System.out.println("NestedMethod ::="); } //$NON-NLS-1$ - consumeNestedMethod(); - break; + case 285 : if (DEBUG) { System.out.println("NestedMethod ::="); } //$NON-NLS-1$ + consumeNestedMethod(); + break; - case 286 : if (DEBUG) { System.out.println("StaticInitializer ::= StaticOnly Block"); } //$NON-NLS-1$ - consumeStaticInitializer(); - break; + case 286 : if (DEBUG) { System.out.println("StaticInitializer ::= StaticOnly Block"); } //$NON-NLS-1$ + consumeStaticInitializer(); + break; - case 287 : if (DEBUG) { System.out.println("StaticOnly ::= static"); } //$NON-NLS-1$ - consumeStaticOnly(); - break; + case 287 : if (DEBUG) { System.out.println("StaticOnly ::= static"); } //$NON-NLS-1$ + consumeStaticOnly(); + break; - case 288 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader MethodBody"); } //$NON-NLS-1$ - consumeConstructorDeclaration() ; - break; + case 288 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader MethodBody"); } //$NON-NLS-1$ + consumeConstructorDeclaration() ; + break; - case 289 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON"); } //$NON-NLS-1$ - consumeInvalidConstructorDeclaration() ; - break; + case 289 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON"); } //$NON-NLS-1$ + consumeInvalidConstructorDeclaration() ; + break; - case 290 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= this LPAREN..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocation(0, THIS_CALL); - break; + case 290 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= this LPAREN..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocation(0, THIS_CALL); + break; - case 291 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments this"); } //$NON-NLS-1$ - consumeExplicitConstructorInvocationWithTypeArguments(0,THIS_CALL); - break; + case 291 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments this"); } //$NON-NLS-1$ + consumeExplicitConstructorInvocationWithTypeArguments(0,THIS_CALL); + break; - case 292 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= super LPAREN..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocation(0,SUPER_CALL); - break; + case 292 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= super LPAREN..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocation(0,SUPER_CALL); + break; - case 293 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocationWithTypeArguments(0,SUPER_CALL); - break; + case 293 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocationWithTypeArguments(0,SUPER_CALL); + break; - case 294 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT super..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocation(1, SUPER_CALL); - break; + case 294 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT super..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocation(1, SUPER_CALL); + break; - case 295 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocationWithTypeArguments(1, SUPER_CALL); - break; + case 295 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocationWithTypeArguments(1, SUPER_CALL); + break; - case 296 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN"); } //$NON-NLS-1$ - consumeExplicitConstructorInvocation(2, SUPER_CALL); - break; + case 296 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN"); } //$NON-NLS-1$ + consumeExplicitConstructorInvocation(2, SUPER_CALL); + break; - case 297 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocationWithTypeArguments(2, SUPER_CALL); - break; + case 297 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocationWithTypeArguments(2, SUPER_CALL); + break; - case 298 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT this..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocation(1, THIS_CALL); - break; + case 298 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT this..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocation(1, THIS_CALL); + break; - case 299 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocationWithTypeArguments(1, THIS_CALL); - break; + case 299 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocationWithTypeArguments(1, THIS_CALL); + break; - case 300 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN"); } //$NON-NLS-1$ - consumeExplicitConstructorInvocation(2, THIS_CALL); - break; + case 300 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN"); } //$NON-NLS-1$ + consumeExplicitConstructorInvocation(2, THIS_CALL); + break; - case 301 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); } //$NON-NLS-1$ - consumeExplicitConstructorInvocationWithTypeArguments(2, THIS_CALL); - break; + case 301 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); } //$NON-NLS-1$ + consumeExplicitConstructorInvocationWithTypeArguments(2, THIS_CALL); + break; - case 302 : if (DEBUG) { System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody"); } //$NON-NLS-1$ - consumeInterfaceDeclaration(); - break; + case 302 : if (DEBUG) { System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody"); } //$NON-NLS-1$ + consumeInterfaceDeclaration(); + break; - case 303 : if (DEBUG) { System.out.println("InterfaceHeader ::= InterfaceHeaderName..."); } //$NON-NLS-1$ - consumeInterfaceHeader(); - break; + case 303 : if (DEBUG) { System.out.println("InterfaceHeader ::= InterfaceHeaderName..."); } //$NON-NLS-1$ + consumeInterfaceHeader(); + break; - case 304 : if (DEBUG) { System.out.println("InterfaceHeaderName ::= InterfaceHeaderName1..."); } //$NON-NLS-1$ - consumeTypeHeaderNameWithTypeParameters(); - break; + case 304 : if (DEBUG) { System.out.println("InterfaceHeaderName ::= InterfaceHeaderName1..."); } //$NON-NLS-1$ + consumeTypeHeaderNameWithTypeParameters(); + break; - case 306 : if (DEBUG) { System.out.println("InterfaceHeaderName1 ::= Modifiersopt interface..."); } //$NON-NLS-1$ - consumeInterfaceHeaderName1(); - break; + case 306 : if (DEBUG) { System.out.println("InterfaceHeaderName1 ::= Modifiersopt interface..."); } //$NON-NLS-1$ + consumeInterfaceHeaderName1(); + break; - case 307 : if (DEBUG) { System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList"); } //$NON-NLS-1$ - consumeInterfaceHeaderExtends(); - break; + case 307 : if (DEBUG) { System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList"); } //$NON-NLS-1$ + consumeInterfaceHeaderExtends(); + break; - case 310 : if (DEBUG) { System.out.println("InterfaceMemberDeclarations ::=..."); } //$NON-NLS-1$ - consumeInterfaceMemberDeclarations(); - break; + case 310 : if (DEBUG) { System.out.println("InterfaceMemberDeclarations ::=..."); } //$NON-NLS-1$ + consumeInterfaceMemberDeclarations(); + break; - case 311 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= SEMICOLON"); } //$NON-NLS-1$ - consumeEmptyTypeDeclaration(); - break; + case 311 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= SEMICOLON"); } //$NON-NLS-1$ + consumeEmptyTypeDeclaration(); + break; - case 313 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); } //$NON-NLS-1$ - consumeInterfaceMethodDeclaration(false); - break; + case 313 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); } //$NON-NLS-1$ + consumeInterfaceMethodDeclaration(false); + break; - case 314 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= MethodHeader MethodBody"); } //$NON-NLS-1$ - consumeInterfaceMethodDeclaration(false); - break; + case 314 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= MethodHeader MethodBody"); } //$NON-NLS-1$ + consumeInterfaceMethodDeclaration(false); + break; - case 315 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); } //$NON-NLS-1$ - consumeInterfaceMethodDeclaration(true); - break; + case 315 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); } //$NON-NLS-1$ + consumeInterfaceMethodDeclaration(true); + break; - case 316 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); } //$NON-NLS-1$ - consumeInvalidConstructorDeclaration(true); - break; + case 316 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); } //$NON-NLS-1$ + consumeInvalidConstructorDeclaration(true); + break; - case 317 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); } //$NON-NLS-1$ - consumeInvalidConstructorDeclaration(false); - break; + case 317 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); } //$NON-NLS-1$ + consumeInvalidConstructorDeclaration(false); + break; - case 328 : if (DEBUG) { System.out.println("RecordDeclaration ::= RecordHeaderPart RecordBody"); } //$NON-NLS-1$ - consumeRecordDeclaration(); - break; + case 328 : if (DEBUG) { System.out.println("RecordDeclaration ::= RecordHeaderPart RecordBody"); } //$NON-NLS-1$ + consumeRecordDeclaration(); + break; - case 329 : if (DEBUG) { System.out.println("RecordHeaderPart ::= RecordHeaderName RecordHeader..."); } //$NON-NLS-1$ - consumeRecordHeaderPart(); - break; + case 329 : if (DEBUG) { System.out.println("RecordHeaderPart ::= RecordHeaderName RecordHeader..."); } //$NON-NLS-1$ + consumeRecordHeaderPart(); + break; - case 330 : if (DEBUG) { System.out.println("RecordHeaderName ::= RecordHeaderName1 TypeParameters"); } //$NON-NLS-1$ - consumeRecordHeaderNameWithTypeParameters(); - break; + case 330 : if (DEBUG) { System.out.println("RecordHeaderName ::= RecordHeaderName1 TypeParameters"); } //$NON-NLS-1$ + consumeRecordHeaderNameWithTypeParameters(); + break; - case 332 : if (DEBUG) { System.out.println("RecordHeaderName1 ::= Modifiersopt..."); } //$NON-NLS-1$ - consumeRecordHeaderName1(); - break; + case 332 : if (DEBUG) { System.out.println("RecordHeaderName1 ::= Modifiersopt..."); } //$NON-NLS-1$ + consumeRecordHeaderName1(); + break; - case 333 : if (DEBUG) { System.out.println("RecordComponentHeaderRightParen ::= RPAREN"); } //$NON-NLS-1$ - consumeRecordComponentHeaderRightParen(); - break; + case 333 : if (DEBUG) { System.out.println("RecordComponentHeaderRightParen ::= RPAREN"); } //$NON-NLS-1$ + consumeRecordComponentHeaderRightParen(); + break; - case 334 : if (DEBUG) { System.out.println("RecordHeader ::= LPAREN RecordComponentsopt..."); } //$NON-NLS-1$ - consumeRecordHeader(); - break; + case 334 : if (DEBUG) { System.out.println("RecordHeader ::= LPAREN RecordComponentsopt..."); } //$NON-NLS-1$ + consumeRecordHeader(); + break; - case 335 : if (DEBUG) { System.out.println("RecordComponentsopt ::="); } //$NON-NLS-1$ - consumeRecordComponentsopt(); - break; + case 335 : if (DEBUG) { System.out.println("RecordComponentsopt ::="); } //$NON-NLS-1$ + consumeRecordComponentsopt(); + break; - case 338 : if (DEBUG) { System.out.println("RecordComponents ::= RecordComponents COMMA..."); } //$NON-NLS-1$ - consumeRecordComponents(); - break; + case 338 : if (DEBUG) { System.out.println("RecordComponents ::= RecordComponents COMMA..."); } //$NON-NLS-1$ + consumeRecordComponents(); + break; - case 340 : if (DEBUG) { System.out.println("RecordComponent ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeRecordComponent(false); - break; + case 340 : if (DEBUG) { System.out.println("RecordComponent ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeRecordComponent(false); + break; - case 341 : if (DEBUG) { System.out.println("VariableArityRecordComponent ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeRecordComponent(true); - break; + case 341 : if (DEBUG) { System.out.println("VariableArityRecordComponent ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeRecordComponent(true); + break; - case 342 : if (DEBUG) { System.out.println("VariableArityRecordComponent ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeRecordComponent(true); - break; + case 342 : if (DEBUG) { System.out.println("VariableArityRecordComponent ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeRecordComponent(true); + break; - case 343 : if (DEBUG) { System.out.println("RecordBody ::= LBRACE RecordBodyDeclarationopt RBRACE"); } //$NON-NLS-1$ - consumeRecordBody(); - break; + case 343 : if (DEBUG) { System.out.println("RecordBody ::= LBRACE RecordBodyDeclarationopt RBRACE"); } //$NON-NLS-1$ + consumeRecordBody(); + break; - case 344 : if (DEBUG) { System.out.println("RecordBodyDeclarationopt ::="); } //$NON-NLS-1$ - consumeEmptyRecordBodyDeclaration(); - break; + case 344 : if (DEBUG) { System.out.println("RecordBodyDeclarationopt ::="); } //$NON-NLS-1$ + consumeEmptyRecordBodyDeclaration(); + break; - case 347 : if (DEBUG) { System.out.println("RecordBodyDeclarations ::= RecordBodyDeclarations..."); } //$NON-NLS-1$ - consumeRecordBodyDeclarations(); - break; + case 347 : if (DEBUG) { System.out.println("RecordBodyDeclarations ::= RecordBodyDeclarations..."); } //$NON-NLS-1$ + consumeRecordBodyDeclarations(); + break; - case 348 : if (DEBUG) { System.out.println("RecordBodyDeclaration ::= ClassBodyDeclaration"); } //$NON-NLS-1$ - consumeRecordBodyDeclaration(); - break; + case 348 : if (DEBUG) { System.out.println("RecordBodyDeclaration ::= ClassBodyDeclaration"); } //$NON-NLS-1$ + consumeRecordBodyDeclaration(); + break; - case 349 : if (DEBUG) { System.out.println("RecordBodyDeclaration ::= CompactConstructorDeclaration"); } //$NON-NLS-1$ - consumeRecordBodyDeclaration(); - break; + case 349 : if (DEBUG) { System.out.println("RecordBodyDeclaration ::= CompactConstructorDeclaration"); } //$NON-NLS-1$ + consumeRecordBodyDeclaration(); + break; - case 350 : if (DEBUG) { System.out.println("CompactConstructorDeclaration ::=..."); } //$NON-NLS-1$ - consumeCompactConstructorDeclaration(); - break; + case 350 : if (DEBUG) { System.out.println("CompactConstructorDeclaration ::=..."); } //$NON-NLS-1$ + consumeCompactConstructorDeclaration(); + break; - case 351 : if (DEBUG) { System.out.println("CompactConstructorHeader ::=..."); } //$NON-NLS-1$ - consumeCompactConstructorHeader(); - break; + case 351 : if (DEBUG) { System.out.println("CompactConstructorHeader ::=..."); } //$NON-NLS-1$ + consumeCompactConstructorHeader(); + break; - case 352 : if (DEBUG) { System.out.println("CompactConstructorHeaderName ::= Modifiersopt Identifier"); } //$NON-NLS-1$ - consumeCompactConstructorHeaderName(); - break; + case 352 : if (DEBUG) { System.out.println("CompactConstructorHeaderName ::= Modifiersopt Identifier"); } //$NON-NLS-1$ + consumeCompactConstructorHeaderName(); + break; - case 353 : if (DEBUG) { System.out.println("CompactConstructorHeaderName ::= Modifiersopt..."); } //$NON-NLS-1$ - consumeCompactConstructorHeaderNameWithTypeParameters(); - break; + case 353 : if (DEBUG) { System.out.println("CompactConstructorHeaderName ::= Modifiersopt..."); } //$NON-NLS-1$ + consumeCompactConstructorHeaderNameWithTypeParameters(); + break; - case 355 : if (DEBUG) { System.out.println("InstanceofExpression ::= InstanceofExpression..."); } //$NON-NLS-1$ - consumeInstanceOfExpression(); - break; + case 355 : if (DEBUG) { System.out.println("InstanceofExpression ::= InstanceofExpression..."); } //$NON-NLS-1$ + consumeInstanceOfExpression(); + break; - case 357 : if (DEBUG) { System.out.println("InstanceofRHS -> InstanceofPattern"); } //$NON-NLS-1$ - consumeInstanceOfRHS(); - break; + case 357 : if (DEBUG) { System.out.println("InstanceofRHS -> InstanceofPattern"); } //$NON-NLS-1$ + consumeInstanceOfRHS(); + break; - case 358 : if (DEBUG) { System.out.println("InstanceofClassic ::= instanceof Modifiersopt Type"); } //$NON-NLS-1$ - consumeInstanceOfClassic(); - break; + case 358 : if (DEBUG) { System.out.println("InstanceofClassic ::= instanceof Modifiersopt Type"); } //$NON-NLS-1$ + consumeInstanceOfClassic(); + break; - case 359 : if (DEBUG) { System.out.println("InstanceofPattern ::= instanceof Pattern"); } //$NON-NLS-1$ - consumeInstanceofPattern(); - break; + case 359 : if (DEBUG) { System.out.println("InstanceofPattern ::= instanceof Pattern"); } //$NON-NLS-1$ + consumeInstanceofPattern(); + break; - case 361 : if (DEBUG) { System.out.println("Pattern -> RecordPattern"); } //$NON-NLS-1$ - consumePattern(); - break; + case 361 : if (DEBUG) { System.out.println("Pattern -> RecordPattern"); } //$NON-NLS-1$ + consumePattern(); + break; - case 362 : if (DEBUG) { System.out.println("TypePattern ::= Modifiersopt Type Identifier"); } //$NON-NLS-1$ - consumeTypePattern(); - break; + case 362 : if (DEBUG) { System.out.println("TypePattern ::= Modifiersopt Type Identifier"); } //$NON-NLS-1$ + consumeTypePattern(); + break; - case 363 : if (DEBUG) { System.out.println("RecordPattern ::= Modifiersopt ReferenceType PushLPAREN"); } //$NON-NLS-1$ - consumeRecordPattern(); - break; + case 363 : if (DEBUG) { System.out.println("RecordPattern ::= Modifiersopt ReferenceType PushLPAREN"); } //$NON-NLS-1$ + consumeRecordPattern(); + break; - case 364 : if (DEBUG) { System.out.println("PatternListopt ::="); } //$NON-NLS-1$ - consumePatternListopt(); - break; + case 364 : if (DEBUG) { System.out.println("PatternListopt ::="); } //$NON-NLS-1$ + consumePatternListopt(); + break; - case 367 : if (DEBUG) { System.out.println("PatternList ::= PatternList COMMA Pattern"); } //$NON-NLS-1$ - consumePatternList(); - break; + case 367 : if (DEBUG) { System.out.println("PatternList ::= PatternList COMMA Pattern"); } //$NON-NLS-1$ + consumePatternList(); + break; - case 369 : if (DEBUG) { System.out.println("PushLeftBrace ::="); } //$NON-NLS-1$ - consumePushLeftBrace(); - break; + case 373 : if (DEBUG) { System.out.println("StringTemplateExpression ::= Name DOT TemplateArgument"); } //$NON-NLS-1$ + consumeTemplateExpressionWithName(); + break; - case 370 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace ,opt RBRACE"); } //$NON-NLS-1$ - consumeEmptyArrayInitializer(); - break; + case 374 : if (DEBUG) { System.out.println("StringTemplateExpression ::= Primary DOT..."); } //$NON-NLS-1$ + consumeTemplateExpressionWithPrimary(); + break; - case 371 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); } //$NON-NLS-1$ - consumeArrayInitializer(); - break; + case 376 : if (DEBUG) { System.out.println("PushLeftBrace ::="); } //$NON-NLS-1$ + consumePushLeftBrace(); + break; - case 372 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); } //$NON-NLS-1$ - consumeArrayInitializer(); - break; + case 377 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace ,opt RBRACE"); } //$NON-NLS-1$ + consumeEmptyArrayInitializer(); + break; - case 374 : if (DEBUG) { System.out.println("VariableInitializers ::= VariableInitializers COMMA..."); } //$NON-NLS-1$ - consumeVariableInitializers(); - break; + case 378 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); } //$NON-NLS-1$ + consumeArrayInitializer(); + break; - case 375 : if (DEBUG) { System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE"); } //$NON-NLS-1$ - consumeBlock(); - break; + case 379 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); } //$NON-NLS-1$ + consumeArrayInitializer(); + break; - case 376 : if (DEBUG) { System.out.println("OpenBlock ::="); } //$NON-NLS-1$ - consumeOpenBlock() ; - break; + case 381 : if (DEBUG) { System.out.println("VariableInitializers ::= VariableInitializers COMMA..."); } //$NON-NLS-1$ + consumeVariableInitializers(); + break; - case 377 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatement"); } //$NON-NLS-1$ - consumeBlockStatement() ; - break; + case 382 : if (DEBUG) { System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE"); } //$NON-NLS-1$ + consumeBlock(); + break; - case 378 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatements BlockStatement"); } //$NON-NLS-1$ - consumeBlockStatements() ; - break; + case 383 : if (DEBUG) { System.out.println("OpenBlock ::="); } //$NON-NLS-1$ + consumeOpenBlock() ; + break; - case 386 : if (DEBUG) { System.out.println("BlockStatement ::= InterfaceDeclaration"); } //$NON-NLS-1$ - consumeInvalidInterfaceDeclaration(); - break; + case 384 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatement"); } //$NON-NLS-1$ + consumeBlockStatement() ; + break; - case 387 : if (DEBUG) { System.out.println("BlockStatement ::= AnnotationTypeDeclaration"); } //$NON-NLS-1$ - consumeInvalidAnnotationTypeDeclaration(); - break; + case 385 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatements BlockStatement"); } //$NON-NLS-1$ + consumeBlockStatements() ; + break; - case 388 : if (DEBUG) { System.out.println("BlockStatement ::= EnumDeclaration"); } //$NON-NLS-1$ - consumeInvalidEnumDeclaration(); - break; + case 393 : if (DEBUG) { System.out.println("BlockStatement ::= InterfaceDeclaration"); } //$NON-NLS-1$ + consumeInvalidInterfaceDeclaration(); + break; - case 389 : if (DEBUG) { System.out.println("LocalVariableDeclarationStatement ::=..."); } //$NON-NLS-1$ - consumeLocalVariableDeclarationStatement(); - break; + case 394 : if (DEBUG) { System.out.println("BlockStatement ::= AnnotationTypeDeclaration"); } //$NON-NLS-1$ + consumeInvalidAnnotationTypeDeclaration(); + break; - case 390 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Type PushModifiers..."); } //$NON-NLS-1$ - consumeLocalVariableDeclaration(); - break; + case 395 : if (DEBUG) { System.out.println("BlockStatement ::= EnumDeclaration"); } //$NON-NLS-1$ + consumeInvalidEnumDeclaration(); + break; - case 391 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Modifiers Type..."); } //$NON-NLS-1$ - consumeLocalVariableDeclaration(); - break; + case 396 : if (DEBUG) { System.out.println("LocalVariableDeclarationStatement ::=..."); } //$NON-NLS-1$ + consumeLocalVariableDeclarationStatement(); + break; - case 392 : if (DEBUG) { System.out.println("PushModifiers ::="); } //$NON-NLS-1$ - consumePushModifiers(); - break; + case 397 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Type PushModifiers..."); } //$NON-NLS-1$ + consumeLocalVariableDeclaration(); + break; - case 393 : if (DEBUG) { System.out.println("PushModifiersForHeader ::="); } //$NON-NLS-1$ - consumePushModifiersForHeader(); - break; + case 398 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Modifiers Type..."); } //$NON-NLS-1$ + consumeLocalVariableDeclaration(); + break; - case 394 : if (DEBUG) { System.out.println("PushRealModifiers ::="); } //$NON-NLS-1$ - consumePushRealModifiers(); - break; + case 399 : if (DEBUG) { System.out.println("PushModifiers ::="); } //$NON-NLS-1$ + consumePushModifiers(); + break; - case 422 : if (DEBUG) { System.out.println("EmptyStatement ::= SEMICOLON"); } //$NON-NLS-1$ - consumeEmptyStatement(); - break; + case 400 : if (DEBUG) { System.out.println("PushModifiersForHeader ::="); } //$NON-NLS-1$ + consumePushModifiersForHeader(); + break; - case 423 : if (DEBUG) { System.out.println("LabeledStatement ::= Label COLON Statement"); } //$NON-NLS-1$ - consumeStatementLabel() ; - break; + case 401 : if (DEBUG) { System.out.println("PushRealModifiers ::="); } //$NON-NLS-1$ + consumePushRealModifiers(); + break; - case 424 : if (DEBUG) { System.out.println("LabeledStatementNoShortIf ::= Label COLON..."); } //$NON-NLS-1$ - consumeStatementLabel() ; - break; + case 429 : if (DEBUG) { System.out.println("EmptyStatement ::= SEMICOLON"); } //$NON-NLS-1$ + consumeEmptyStatement(); + break; - case 425 : if (DEBUG) { System.out.println("Label ::= Identifier"); } //$NON-NLS-1$ - consumeLabel() ; - break; + case 430 : if (DEBUG) { System.out.println("LabeledStatement ::= Label COLON Statement"); } //$NON-NLS-1$ + consumeStatementLabel() ; + break; - case 426 : if (DEBUG) { System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON"); } //$NON-NLS-1$ - consumeExpressionStatement(); - break; + case 431 : if (DEBUG) { System.out.println("LabeledStatementNoShortIf ::= Label COLON..."); } //$NON-NLS-1$ + consumeStatementLabel() ; + break; - case 435 : if (DEBUG) { System.out.println("PostExpressionInSwitchStatement ::="); } //$NON-NLS-1$ - consumePostExpressionInSwitch(true); - break; + case 432 : if (DEBUG) { System.out.println("Label ::= Identifier"); } //$NON-NLS-1$ + consumeLabel() ; + break; - case 436 : if (DEBUG) { System.out.println("PostExpressionInSwitchExpression ::="); } //$NON-NLS-1$ - consumePostExpressionInSwitch(false); - break; + case 433 : if (DEBUG) { System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON"); } //$NON-NLS-1$ + consumeExpressionStatement(); + break; - case 437 : if (DEBUG) { System.out.println("PostExpressionInIf ::="); } //$NON-NLS-1$ - consumePostExpressionInIf(); - break; + case 442 : if (DEBUG) { System.out.println("PostExpressionInSwitchStatement ::="); } //$NON-NLS-1$ + consumePostExpressionInSwitch(true); + break; - case 438 : if (DEBUG) { System.out.println("PostExpressionInWhile ::="); } //$NON-NLS-1$ - consumePostExpressionInWhile(); - break; + case 443 : if (DEBUG) { System.out.println("PostExpressionInSwitchExpression ::="); } //$NON-NLS-1$ + consumePostExpressionInSwitch(false); + break; - case 439 : if (DEBUG) { System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN..."); } //$NON-NLS-1$ - consumeStatementIfNoElse(); - break; + case 444 : if (DEBUG) { System.out.println("PostExpressionInIf ::="); } //$NON-NLS-1$ + consumePostExpressionInIf(); + break; - case 440 : if (DEBUG) { System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN..."); } //$NON-NLS-1$ - consumeStatementIfWithElse(); - break; + case 445 : if (DEBUG) { System.out.println("PostExpressionInWhile ::="); } //$NON-NLS-1$ + consumePostExpressionInWhile(); + break; - case 441 : if (DEBUG) { System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression..."); } //$NON-NLS-1$ - consumeStatementIfWithElse(); - break; + case 446 : if (DEBUG) { System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN..."); } //$NON-NLS-1$ + consumeStatementIfNoElse(); + break; - case 442 : if (DEBUG) { System.out.println("SwitchStatement ::= switch LPAREN Expression RPAREN..."); } //$NON-NLS-1$ - consumeStatementSwitch() ; - break; + case 447 : if (DEBUG) { System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN..."); } //$NON-NLS-1$ + consumeStatementIfWithElse(); + break; - case 443 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE RBRACE"); } //$NON-NLS-1$ - consumeEmptySwitchBlock() ; - break; + case 448 : if (DEBUG) { System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression..."); } //$NON-NLS-1$ + consumeStatementIfWithElse(); + break; - case 446 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements..."); } //$NON-NLS-1$ - consumeSwitchBlock() ; - break; + case 449 : if (DEBUG) { System.out.println("SwitchStatement ::= switch LPAREN Expression RPAREN..."); } //$NON-NLS-1$ + consumeStatementSwitch() ; + break; - case 448 : if (DEBUG) { System.out.println("SwitchBlockStatements ::= SwitchBlockStatements..."); } //$NON-NLS-1$ - consumeSwitchBlockStatements() ; - break; + case 450 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE RBRACE"); } //$NON-NLS-1$ + consumeEmptySwitchBlock() ; + break; - case 450 : if (DEBUG) { System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements"); } //$NON-NLS-1$ - consumeSwitchBlockStatement() ; - break; + case 453 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements..."); } //$NON-NLS-1$ + consumeSwitchBlock() ; + break; - case 452 : if (DEBUG) { System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel"); } //$NON-NLS-1$ - consumeSwitchLabels() ; - break; + case 455 : if (DEBUG) { System.out.println("SwitchBlockStatements ::= SwitchBlockStatements..."); } //$NON-NLS-1$ + consumeSwitchBlockStatements() ; + break; - case 453 : if (DEBUG) { System.out.println("SwitchLabel ::= SwitchLabelCaseLhs COLON"); } //$NON-NLS-1$ - consumeCaseLabel(); - break; + case 457 : if (DEBUG) { System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements"); } //$NON-NLS-1$ + consumeSwitchBlockStatement() ; + break; - case 454 : if (DEBUG) { System.out.println("SwitchLabel ::= default COLON"); } //$NON-NLS-1$ - consumeDefaultLabel(); - break; + case 459 : if (DEBUG) { System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel"); } //$NON-NLS-1$ + consumeSwitchLabels() ; + break; - case 457 : if (DEBUG) { System.out.println("SwitchExpression ::= switch LPAREN Expression RPAREN..."); } //$NON-NLS-1$ - consumeSwitchExpression() ; - break; + case 460 : if (DEBUG) { System.out.println("SwitchLabel ::= SwitchLabelCaseLhs COLON"); } //$NON-NLS-1$ + consumeCaseLabel(); + break; - case 460 : if (DEBUG) { System.out.println("SwitchLabeledRule ::= SwitchLabeledThrowStatement"); } //$NON-NLS-1$ - consumeSwitchLabeledRule(); - break; + case 461 : if (DEBUG) { System.out.println("SwitchLabel ::= default COLON"); } //$NON-NLS-1$ + consumeDefaultLabel(); + break; - case 461 : if (DEBUG) { System.out.println("SwitchLabeledExpression ::= SwitchLabelExpr Expression"); } //$NON-NLS-1$ - consumeSwitchLabeledExpression(); - break; + case 464 : if (DEBUG) { System.out.println("SwitchExpression ::= switch LPAREN Expression RPAREN..."); } //$NON-NLS-1$ + consumeSwitchExpression() ; + break; - case 462 : if (DEBUG) { System.out.println("SwitchLabeledBlock ::= SwitchLabelExpr Block"); } //$NON-NLS-1$ - consumeSwitchLabeledBlock(); - break; + case 467 : if (DEBUG) { System.out.println("SwitchLabeledRule ::= SwitchLabeledThrowStatement"); } //$NON-NLS-1$ + consumeSwitchLabeledRule(); + break; - case 463 : if (DEBUG) { System.out.println("SwitchLabeledThrowStatement ::= SwitchLabelExpr..."); } //$NON-NLS-1$ - consumeSwitchLabeledThrowStatement(); - break; + case 468 : if (DEBUG) { System.out.println("SwitchLabeledExpression ::= SwitchLabelExpr Expression"); } //$NON-NLS-1$ + consumeSwitchLabeledExpression(); + break; - case 464 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= default ARROW"); } //$NON-NLS-1$ - consumeDefaultLabelExpr(); - break; + case 469 : if (DEBUG) { System.out.println("SwitchLabeledBlock ::= SwitchLabelExpr Block"); } //$NON-NLS-1$ + consumeSwitchLabeledBlock(); + break; - case 465 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= SwitchLabelCaseLhs BeginCaseExpr..."); } //$NON-NLS-1$ - consumeCaseLabelExpr(); - break; + case 470 : if (DEBUG) { System.out.println("SwitchLabeledThrowStatement ::= SwitchLabelExpr..."); } //$NON-NLS-1$ + consumeSwitchLabeledThrowStatement(); + break; - case 466 : if (DEBUG) { System.out.println("SwitchLabelCaseLhs ::= case CaseLabelElements"); } //$NON-NLS-1$ - consumeSwitchLabelCaseLhs(); - break; + case 471 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= default ARROW"); } //$NON-NLS-1$ + consumeDefaultLabelExpr(); + break; - case 468 : if (DEBUG) { System.out.println("CaseLabelElements ::= CaseLabelElements COMMA..."); } //$NON-NLS-1$ - consumeCaseLabelElements(); - break; + case 472 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= SwitchLabelCaseLhs BeginCaseExpr..."); } //$NON-NLS-1$ + consumeCaseLabelExpr(); + break; - case 469 : if (DEBUG) { System.out.println("CaseLabelElement ::= ConstantExpression"); } //$NON-NLS-1$ - consumeCaseLabelElement(CaseLabelKind.CASE_EXPRESSION); - break; + case 473 : if (DEBUG) { System.out.println("SwitchLabelCaseLhs ::= case CaseLabelElements"); } //$NON-NLS-1$ + consumeSwitchLabelCaseLhs(); + break; - case 470 : if (DEBUG) { System.out.println("CaseLabelElement ::= default"); } //$NON-NLS-1$ - consumeCaseLabelElement(CaseLabelKind.CASE_DEFAULT); - break; + case 475 : if (DEBUG) { System.out.println("CaseLabelElements ::= CaseLabelElements COMMA..."); } //$NON-NLS-1$ + consumeCaseLabelElements(); + break; - case 471 : if (DEBUG) { System.out.println("CaseLabelElement ::= CaseLabelElementPattern"); } //$NON-NLS-1$ - consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); - break; + case 476 : if (DEBUG) { System.out.println("CaseLabelElement ::= ConstantExpression"); } //$NON-NLS-1$ + consumeCaseLabelElement(CaseLabelKind.CASE_EXPRESSION); + break; - case 472 : if (DEBUG) { System.out.println("CaseLabelElement ::= CaseLabelElementPattern Guard"); } //$NON-NLS-1$ - consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); - break; + case 477 : if (DEBUG) { System.out.println("CaseLabelElement ::= default"); } //$NON-NLS-1$ + consumeCaseLabelElement(CaseLabelKind.CASE_DEFAULT); + break; - case 473 : if (DEBUG) { System.out.println("CaseLabelElementPattern ::= BeginCaseElement Pattern"); } //$NON-NLS-1$ - consumeCaseLabelElementPattern(); - break; + case 478 : if (DEBUG) { System.out.println("CaseLabelElement ::= CaseLabelElementPattern"); } //$NON-NLS-1$ + consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); + break; - case 474 : if (DEBUG) { System.out.println("Guard ::= RestrictedIdentifierWhen Expression"); } //$NON-NLS-1$ - consumeGuard(); - break; + case 479 : if (DEBUG) { System.out.println("CaseLabelElement ::= CaseLabelElementPattern Guard"); } //$NON-NLS-1$ + consumeCaseLabelElement(CaseLabelKind.CASE_PATTERN); + break; - case 475 : if (DEBUG) { System.out.println("YieldStatement ::= RestrictedIdentifierYield Expression"); } //$NON-NLS-1$ - consumeStatementYield() ; - break; + case 480 : if (DEBUG) { System.out.println("CaseLabelElementPattern ::= BeginCaseElement Pattern"); } //$NON-NLS-1$ + consumeCaseLabelElementPattern(); + break; - case 476 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); } //$NON-NLS-1$ - consumeStatementWhile() ; - break; + case 481 : if (DEBUG) { System.out.println("Guard ::= RestrictedIdentifierWhen Expression"); } //$NON-NLS-1$ + consumeGuard(); + break; - case 477 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); } //$NON-NLS-1$ - consumeStatementWhile() ; - break; + case 482 : if (DEBUG) { System.out.println("YieldStatement ::= RestrictedIdentifierYield Expression"); } //$NON-NLS-1$ + consumeStatementYield() ; + break; - case 478 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); } //$NON-NLS-1$ - consumeStatementDo() ; - break; + case 483 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); } //$NON-NLS-1$ + consumeStatementWhile() ; + break; - case 479 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); } //$NON-NLS-1$ - consumeStatementFor() ; - break; + case 484 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); } //$NON-NLS-1$ + consumeStatementWhile() ; + break; - case 480 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); } //$NON-NLS-1$ - consumeStatementFor() ; - break; + case 485 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); } //$NON-NLS-1$ + consumeStatementDo() ; + break; - case 481 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); } //$NON-NLS-1$ - consumeForInit() ; - break; + case 486 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); } //$NON-NLS-1$ + consumeStatementFor() ; + break; - case 485 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); } //$NON-NLS-1$ - consumeStatementExpressionList() ; - break; + case 487 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); } //$NON-NLS-1$ + consumeStatementFor() ; + break; - case 486 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); } //$NON-NLS-1$ - consumeSimpleAssertStatement() ; - break; + case 488 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); } //$NON-NLS-1$ + consumeForInit() ; + break; - case 487 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); } //$NON-NLS-1$ - consumeAssertStatement() ; - break; + case 492 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); } //$NON-NLS-1$ + consumeStatementExpressionList() ; + break; - case 488 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); } //$NON-NLS-1$ - consumeStatementBreak() ; - break; + case 493 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); } //$NON-NLS-1$ + consumeSimpleAssertStatement() ; + break; - case 489 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); } //$NON-NLS-1$ - consumeStatementBreakWithLabel() ; - break; + case 494 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); } //$NON-NLS-1$ + consumeAssertStatement() ; + break; - case 490 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); } //$NON-NLS-1$ - consumeStatementContinue() ; - break; + case 495 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); } //$NON-NLS-1$ + consumeStatementBreak() ; + break; - case 491 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); } //$NON-NLS-1$ - consumeStatementContinueWithLabel() ; - break; + case 496 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); } //$NON-NLS-1$ + consumeStatementBreakWithLabel() ; + break; - case 492 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); } //$NON-NLS-1$ - consumeStatementReturn() ; - break; + case 497 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); } //$NON-NLS-1$ + consumeStatementContinue() ; + break; - case 493 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); } //$NON-NLS-1$ - consumeStatementThrow(); - break; + case 498 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); } //$NON-NLS-1$ + consumeStatementContinueWithLabel() ; + break; - case 494 : if (DEBUG) { System.out.println("ThrowExpression ::= throw Expression"); } //$NON-NLS-1$ - consumeThrowExpression() ; - break; + case 499 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); } //$NON-NLS-1$ + consumeStatementReturn() ; + break; - case 495 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); } //$NON-NLS-1$ - consumeStatementSynchronized(); - break; + case 500 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); } //$NON-NLS-1$ + consumeStatementThrow(); + break; - case 496 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); } //$NON-NLS-1$ - consumeOnlySynchronized(); - break; + case 501 : if (DEBUG) { System.out.println("ThrowExpression ::= throw Expression"); } //$NON-NLS-1$ + consumeThrowExpression() ; + break; - case 497 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); } //$NON-NLS-1$ - consumeStatementTry(false, false); - break; + case 502 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); } //$NON-NLS-1$ + consumeStatementSynchronized(); + break; - case 498 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); } //$NON-NLS-1$ - consumeStatementTry(true, false); - break; + case 503 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); } //$NON-NLS-1$ + consumeOnlySynchronized(); + break; - case 499 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ - consumeStatementTry(false, true); - break; + case 504 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); } //$NON-NLS-1$ + consumeStatementTry(false, false); + break; - case 500 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ - consumeStatementTry(true, true); - break; + case 505 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); } //$NON-NLS-1$ + consumeStatementTry(true, false); + break; - case 501 : if (DEBUG) { System.out.println("ResourceSpecification ::= LPAREN Resources ;opt RPAREN"); } //$NON-NLS-1$ - consumeResourceSpecification(); - break; + case 506 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ + consumeStatementTry(false, true); + break; - case 502 : if (DEBUG) { System.out.println(";opt ::="); } //$NON-NLS-1$ - consumeResourceOptionalTrailingSemiColon(false); - break; + case 507 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); } //$NON-NLS-1$ + consumeStatementTry(true, true); + break; - case 503 : if (DEBUG) { System.out.println(";opt ::= SEMICOLON"); } //$NON-NLS-1$ - consumeResourceOptionalTrailingSemiColon(true); - break; + case 508 : if (DEBUG) { System.out.println("ResourceSpecification ::= LPAREN Resources ;opt RPAREN"); } //$NON-NLS-1$ + consumeResourceSpecification(); + break; - case 504 : if (DEBUG) { System.out.println("Resources ::= Resource"); } //$NON-NLS-1$ - consumeSingleResource(); - break; + case 509 : if (DEBUG) { System.out.println(";opt ::="); } //$NON-NLS-1$ + consumeResourceOptionalTrailingSemiColon(false); + break; - case 505 : if (DEBUG) { System.out.println("Resources ::= Resources TrailingSemiColon Resource"); } //$NON-NLS-1$ - consumeMultipleResources(); - break; + case 510 : if (DEBUG) { System.out.println(";opt ::= SEMICOLON"); } //$NON-NLS-1$ + consumeResourceOptionalTrailingSemiColon(true); + break; - case 506 : if (DEBUG) { System.out.println("TrailingSemiColon ::= SEMICOLON"); } //$NON-NLS-1$ - consumeResourceOptionalTrailingSemiColon(true); - break; + case 511 : if (DEBUG) { System.out.println("Resources ::= Resource"); } //$NON-NLS-1$ + consumeSingleResource(); + break; - case 507 : if (DEBUG) { System.out.println("Resource ::= Type PushModifiers VariableDeclaratorId..."); } //$NON-NLS-1$ - consumeResourceAsLocalVariableDeclaration(); - break; + case 512 : if (DEBUG) { System.out.println("Resources ::= Resources TrailingSemiColon Resource"); } //$NON-NLS-1$ + consumeMultipleResources(); + break; - case 508 : if (DEBUG) { System.out.println("Resource ::= Modifiers Type PushRealModifiers..."); } //$NON-NLS-1$ - consumeResourceAsLocalVariableDeclaration(); - break; + case 513 : if (DEBUG) { System.out.println("TrailingSemiColon ::= SEMICOLON"); } //$NON-NLS-1$ + consumeResourceOptionalTrailingSemiColon(true); + break; - case 509 : if (DEBUG) { System.out.println("Resource ::= Name"); } //$NON-NLS-1$ - consumeResourceAsLocalVariable(); - break; + case 514 : if (DEBUG) { System.out.println("Resource ::= Type PushModifiers VariableDeclaratorId..."); } //$NON-NLS-1$ + consumeResourceAsLocalVariableDeclaration(); + break; - case 510 : if (DEBUG) { System.out.println("Resource ::= this"); } //$NON-NLS-1$ - consumeResourceAsThis(); - break; + case 515 : if (DEBUG) { System.out.println("Resource ::= Modifiers Type PushRealModifiers..."); } //$NON-NLS-1$ + consumeResourceAsLocalVariableDeclaration(); + break; - case 511 : if (DEBUG) { System.out.println("Resource ::= FieldAccess"); } //$NON-NLS-1$ - consumeResourceAsFieldAccess(); - break; + case 516 : if (DEBUG) { System.out.println("Resource ::= Name"); } //$NON-NLS-1$ + consumeResourceAsLocalVariable(); + break; - case 513 : if (DEBUG) { System.out.println("ExitTryBlock ::="); } //$NON-NLS-1$ - consumeExitTryBlock(); - break; + case 517 : if (DEBUG) { System.out.println("Resource ::= this"); } //$NON-NLS-1$ + consumeResourceAsThis(); + break; - case 515 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); } //$NON-NLS-1$ - consumeCatches(); - break; + case 518 : if (DEBUG) { System.out.println("Resource ::= FieldAccess"); } //$NON-NLS-1$ + consumeResourceAsFieldAccess(); + break; - case 516 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); } //$NON-NLS-1$ - consumeStatementCatch() ; - break; + case 520 : if (DEBUG) { System.out.println("ExitTryBlock ::="); } //$NON-NLS-1$ + consumeExitTryBlock(); + break; - case 518 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); } //$NON-NLS-1$ - consumeLeftParen(); - break; + case 522 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); } //$NON-NLS-1$ + consumeCatches(); + break; - case 519 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); } //$NON-NLS-1$ - consumeRightParen(); - break; + case 523 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); } //$NON-NLS-1$ + consumeStatementCatch() ; + break; - case 524 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayThis(); - break; + case 525 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); } //$NON-NLS-1$ + consumeLeftParen(); + break; - case 525 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); } //$NON-NLS-1$ - consumePrimaryNoNewArray(); - break; + case 526 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); } //$NON-NLS-1$ + consumeRightParen(); + break; - case 526 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayWithName(); - break; + case 531 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayThis(); + break; - case 529 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayNameThis(); - break; + case 532 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); } //$NON-NLS-1$ + consumePrimaryNoNewArray(); + break; - case 530 : if (DEBUG) { System.out.println("QualifiedSuperReceiver ::= Name DOT super"); } //$NON-NLS-1$ - consumeQualifiedSuperReceiver(); - break; + case 533 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayWithName(); + break; - case 531 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayName(); - break; + case 536 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayNameThis(); + break; - case 532 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayArrayType(); - break; + case 537 : if (DEBUG) { System.out.println("QualifiedSuperReceiver ::= Name DOT super"); } //$NON-NLS-1$ + consumeQualifiedSuperReceiver(); + break; - case 533 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayPrimitiveArrayType(); - break; + case 538 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayName(); + break; - case 534 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); } //$NON-NLS-1$ - consumePrimaryNoNewArrayPrimitiveType(); - break; + case 539 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayArrayType(); + break; - case 540 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ - consumeReferenceExpressionTypeArgumentsAndTrunk(false); - break; + case 540 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayPrimitiveArrayType(); + break; - case 541 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ - consumeReferenceExpressionTypeArgumentsAndTrunk(true); - break; + case 541 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); } //$NON-NLS-1$ + consumePrimaryNoNewArrayPrimitiveType(); + break; - case 542 : if (DEBUG) { System.out.println("ReferenceExpression ::= PrimitiveType Dims COLON_COLON"); } //$NON-NLS-1$ - consumeReferenceExpressionTypeForm(true); - break; + case 547 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ + consumeReferenceExpressionTypeArgumentsAndTrunk(false); + break; - case 543 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name Dimsopt COLON_COLON..."); } //$NON-NLS-1$ - consumeReferenceExpressionTypeForm(false); - break; + case 548 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); } //$NON-NLS-1$ + consumeReferenceExpressionTypeArgumentsAndTrunk(true); + break; - case 544 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name BeginTypeArguments..."); } //$NON-NLS-1$ - consumeReferenceExpressionGenericTypeForm(); - break; + case 549 : if (DEBUG) { System.out.println("ReferenceExpression ::= PrimitiveType Dims COLON_COLON"); } //$NON-NLS-1$ + consumeReferenceExpressionTypeForm(true); + break; - case 545 : if (DEBUG) { System.out.println("ReferenceExpression ::= Primary COLON_COLON..."); } //$NON-NLS-1$ - consumeReferenceExpressionPrimaryForm(); - break; + case 550 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name Dimsopt COLON_COLON..."); } //$NON-NLS-1$ + consumeReferenceExpressionTypeForm(false); + break; - case 546 : if (DEBUG) { System.out.println("ReferenceExpression ::= QualifiedSuperReceiver..."); } //$NON-NLS-1$ - consumeReferenceExpressionPrimaryForm(); - break; + case 551 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name BeginTypeArguments..."); } //$NON-NLS-1$ + consumeReferenceExpressionGenericTypeForm(); + break; - case 547 : if (DEBUG) { System.out.println("ReferenceExpression ::= super COLON_COLON..."); } //$NON-NLS-1$ - consumeReferenceExpressionSuperForm(); - break; + case 552 : if (DEBUG) { System.out.println("ReferenceExpression ::= Primary COLON_COLON..."); } //$NON-NLS-1$ + consumeReferenceExpressionPrimaryForm(); + break; - case 548 : if (DEBUG) { System.out.println("NonWildTypeArgumentsopt ::="); } //$NON-NLS-1$ - consumeEmptyTypeArguments(); - break; + case 553 : if (DEBUG) { System.out.println("ReferenceExpression ::= QualifiedSuperReceiver..."); } //$NON-NLS-1$ + consumeReferenceExpressionPrimaryForm(); + break; - case 550 : if (DEBUG) { System.out.println("IdentifierOrNew ::= Identifier"); } //$NON-NLS-1$ - consumeIdentifierOrNew(false); - break; + case 554 : if (DEBUG) { System.out.println("ReferenceExpression ::= super COLON_COLON..."); } //$NON-NLS-1$ + consumeReferenceExpressionSuperForm(); + break; - case 551 : if (DEBUG) { System.out.println("IdentifierOrNew ::= new"); } //$NON-NLS-1$ - consumeIdentifierOrNew(true); - break; + case 555 : if (DEBUG) { System.out.println("NonWildTypeArgumentsopt ::="); } //$NON-NLS-1$ + consumeEmptyTypeArguments(); + break; - case 552 : if (DEBUG) { System.out.println("LambdaExpression ::= LambdaParameters ARROW LambdaBody"); } //$NON-NLS-1$ - consumeLambdaExpression(); - break; + case 557 : if (DEBUG) { System.out.println("IdentifierOrNew ::= Identifier"); } //$NON-NLS-1$ + consumeIdentifierOrNew(false); + break; - case 553 : if (DEBUG) { System.out.println("NestedLambda ::="); } //$NON-NLS-1$ - consumeNestedLambda(); - break; + case 558 : if (DEBUG) { System.out.println("IdentifierOrNew ::= new"); } //$NON-NLS-1$ + consumeIdentifierOrNew(true); + break; - case 554 : if (DEBUG) { System.out.println("LambdaParameters ::= Identifier NestedLambda"); } //$NON-NLS-1$ - consumeTypeElidedLambdaParameter(false); - break; + case 559 : if (DEBUG) { System.out.println("LambdaExpression ::= LambdaParameters ARROW LambdaBody"); } //$NON-NLS-1$ + consumeLambdaExpression(); + break; - case 560 : if (DEBUG) { System.out.println("TypeElidedFormalParameterList ::=..."); } //$NON-NLS-1$ - consumeFormalParameterList(); - break; + case 560 : if (DEBUG) { System.out.println("NestedLambda ::="); } //$NON-NLS-1$ + consumeNestedLambda(); + break; - case 561 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= Modifiersopt Identifier"); } //$NON-NLS-1$ - consumeTypeElidedLambdaParameter(true); - break; + case 561 : if (DEBUG) { System.out.println("LambdaParameters ::= Identifier NestedLambda"); } //$NON-NLS-1$ + consumeTypeElidedLambdaParameter(false); + break; - case 564 : if (DEBUG) { System.out.println("ElidedLeftBraceAndReturn ::="); } //$NON-NLS-1$ - consumeElidedLeftBraceAndReturn(); - break; + case 567 : if (DEBUG) { System.out.println("TypeElidedFormalParameterList ::=..."); } //$NON-NLS-1$ + consumeFormalParameterList(); + break; - case 565 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); } //$NON-NLS-1$ - consumeAllocationHeader(); - break; + case 568 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= Modifiersopt Identifier"); } //$NON-NLS-1$ + consumeTypeElidedLambdaParameter(true); + break; - case 566 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); } //$NON-NLS-1$ - consumeClassInstanceCreationExpressionWithTypeArguments(); - break; + case 571 : if (DEBUG) { System.out.println("ElidedLeftBraceAndReturn ::="); } //$NON-NLS-1$ + consumeElidedLeftBraceAndReturn(); + break; - case 567 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType..."); } //$NON-NLS-1$ - consumeClassInstanceCreationExpression(); - break; + case 572 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); } //$NON-NLS-1$ + consumeAllocationHeader(); + break; - case 568 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ - consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; - break; + case 573 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); } //$NON-NLS-1$ + consumeClassInstanceCreationExpressionWithTypeArguments(); + break; - case 569 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ - consumeClassInstanceCreationExpressionQualified() ; - break; + case 574 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType..."); } //$NON-NLS-1$ + consumeClassInstanceCreationExpression(); + break; - case 570 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ - consumeClassInstanceCreationExpressionQualified() ; - break; + case 575 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ + consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; + break; - case 571 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ - consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; - break; + case 576 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); } //$NON-NLS-1$ + consumeClassInstanceCreationExpressionQualified() ; + break; - case 572 : if (DEBUG) { System.out.println("EnterInstanceCreationArgumentList ::="); } //$NON-NLS-1$ - consumeEnterInstanceCreationArgumentList(); - break; + case 577 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ + consumeClassInstanceCreationExpressionQualified() ; + break; - case 573 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT new"); } //$NON-NLS-1$ - consumeClassInstanceCreationExpressionName() ; - break; + case 578 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); } //$NON-NLS-1$ + consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; + break; - case 574 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); } //$NON-NLS-1$ - consumeClassBodyopt(); - break; + case 579 : if (DEBUG) { System.out.println("EnterInstanceCreationArgumentList ::="); } //$NON-NLS-1$ + consumeEnterInstanceCreationArgumentList(); + break; - case 576 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ - consumeEnterAnonymousClassBody(false); - break; + case 580 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT new"); } //$NON-NLS-1$ + consumeClassInstanceCreationExpressionName() ; + break; - case 577 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); } //$NON-NLS-1$ - consumeClassBodyopt(); - break; + case 581 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); } //$NON-NLS-1$ + consumeClassBodyopt(); + break; - case 579 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ - consumeEnterAnonymousClassBody(true); - break; + case 583 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ + consumeEnterAnonymousClassBody(false); + break; - case 581 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); } //$NON-NLS-1$ - consumeArgumentList(); - break; + case 584 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); } //$NON-NLS-1$ + consumeClassBodyopt(); + break; - case 582 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); } //$NON-NLS-1$ - consumeArrayCreationHeader(); - break; + case 586 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); } //$NON-NLS-1$ + consumeEnterAnonymousClassBody(true); + break; - case 583 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); } //$NON-NLS-1$ - consumeArrayCreationHeader(); - break; + case 588 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); } //$NON-NLS-1$ + consumeArgumentList(); + break; - case 584 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ - consumeArrayCreationExpressionWithoutInitializer(); - break; + case 589 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); } //$NON-NLS-1$ + consumeArrayCreationHeader(); + break; - case 585 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); } //$NON-NLS-1$ - consumeArrayCreationExpressionWithInitializer(); - break; + case 590 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); } //$NON-NLS-1$ + consumeArrayCreationHeader(); + break; - case 586 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ - consumeArrayCreationExpressionWithoutInitializer(); - break; + case 591 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ + consumeArrayCreationExpressionWithoutInitializer(); + break; + + case 592 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); } //$NON-NLS-1$ + consumeArrayCreationExpressionWithInitializer(); + break; + + case 593 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); } //$NON-NLS-1$ + consumeArrayCreationExpressionWithoutInitializer(); + break; - case 587 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); } //$NON-NLS-1$ - consumeArrayCreationExpressionWithInitializer(); - break; + case 594 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); } //$NON-NLS-1$ + consumeArrayCreationExpressionWithInitializer(); + break; - case 589 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); } //$NON-NLS-1$ - consumeDimWithOrWithOutExprs(); - break; + case 596 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); } //$NON-NLS-1$ + consumeDimWithOrWithOutExprs(); + break; - case 591 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= TypeAnnotationsopt LBRACKET..."); } //$NON-NLS-1$ - consumeDimWithOrWithOutExpr(); - break; + case 598 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= TypeAnnotationsopt LBRACKET..."); } //$NON-NLS-1$ + consumeDimWithOrWithOutExpr(); + break; - case 592 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); } //$NON-NLS-1$ - consumeDims(); - break; + case 599 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); } //$NON-NLS-1$ + consumeDims(); + break; - case 595 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); } //$NON-NLS-1$ - consumeOneDimLoop(false); - break; + case 602 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); } //$NON-NLS-1$ + consumeOneDimLoop(false); + break; - case 596 : if (DEBUG) { System.out.println("OneDimLoop ::= TypeAnnotations LBRACKET RBRACKET"); } //$NON-NLS-1$ - consumeOneDimLoop(true); - break; + case 603 : if (DEBUG) { System.out.println("OneDimLoop ::= TypeAnnotations LBRACKET RBRACKET"); } //$NON-NLS-1$ + consumeOneDimLoop(true); + break; - case 597 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); } //$NON-NLS-1$ - consumeFieldAccess(false); - break; + case 604 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); } //$NON-NLS-1$ + consumeFieldAccess(false); + break; - case 598 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); } //$NON-NLS-1$ - consumeFieldAccess(true); - break; + case 605 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); } //$NON-NLS-1$ + consumeFieldAccess(true); + break; - case 599 : if (DEBUG) { System.out.println("FieldAccess ::= QualifiedSuperReceiver DOT Identifier"); } //$NON-NLS-1$ - consumeFieldAccess(false); - break; + case 606 : if (DEBUG) { System.out.println("FieldAccess ::= QualifiedSuperReceiver DOT Identifier"); } //$NON-NLS-1$ + consumeFieldAccess(false); + break; - case 600 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ - consumeMethodInvocationName(); - break; + case 607 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ + consumeMethodInvocationName(); + break; - case 601 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); } //$NON-NLS-1$ - consumeMethodInvocationNameWithTypeArguments(); - break; + case 608 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); } //$NON-NLS-1$ + consumeMethodInvocationNameWithTypeArguments(); + break; - case 602 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); } //$NON-NLS-1$ - consumeMethodInvocationPrimaryWithTypeArguments(); - break; + case 609 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); } //$NON-NLS-1$ + consumeMethodInvocationPrimaryWithTypeArguments(); + break; - case 603 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); } //$NON-NLS-1$ - consumeMethodInvocationPrimary(); - break; + case 610 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); } //$NON-NLS-1$ + consumeMethodInvocationPrimary(); + break; - case 604 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ - consumeMethodInvocationPrimary(); - break; + case 611 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ + consumeMethodInvocationPrimary(); + break; - case 605 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ - consumeMethodInvocationPrimaryWithTypeArguments(); - break; + case 612 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); } //$NON-NLS-1$ + consumeMethodInvocationPrimaryWithTypeArguments(); + break; - case 606 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); } //$NON-NLS-1$ - consumeMethodInvocationSuperWithTypeArguments(); - break; + case 613 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); } //$NON-NLS-1$ + consumeMethodInvocationSuperWithTypeArguments(); + break; - case 607 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); } //$NON-NLS-1$ - consumeMethodInvocationSuper(); - break; + case 614 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); } //$NON-NLS-1$ + consumeMethodInvocationSuper(); + break; - case 608 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); } //$NON-NLS-1$ - consumeArrayAccess(true); - break; + case 615 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); } //$NON-NLS-1$ + consumeArrayAccess(true); + break; - case 609 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); } //$NON-NLS-1$ - consumeArrayAccess(false); - break; + case 616 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); } //$NON-NLS-1$ + consumeArrayAccess(false); + break; - case 610 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); } //$NON-NLS-1$ - consumeArrayAccess(false); - break; + case 617 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); } //$NON-NLS-1$ + consumeArrayAccess(false); + break; - case 612 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); } //$NON-NLS-1$ - consumePostfixExpression(); - break; + case 619 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); } //$NON-NLS-1$ + consumePostfixExpression(); + break; - case 615 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.PLUS,true); - break; + case 622 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.PLUS,true); + break; - case 616 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.MINUS,true); - break; + case 623 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.MINUS,true); + break; - case 617 : if (DEBUG) { System.out.println("PushPosition ::="); } //$NON-NLS-1$ - consumePushPosition(); - break; + case 624 : if (DEBUG) { System.out.println("PushPosition ::="); } //$NON-NLS-1$ + consumePushPosition(); + break; - case 620 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.PLUS); - break; + case 627 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.PLUS); + break; - case 621 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.MINUS); - break; + case 628 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.MINUS); + break; - case 623 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.PLUS,false); - break; + case 630 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.PLUS,false); + break; - case 624 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.MINUS,false); - break; + case 631 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.MINUS,false); + break; - case 626 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.TWIDDLE); - break; + case 633 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.TWIDDLE); + break; - case 627 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.NOT); - break; + case 634 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.NOT); + break; - case 629 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); } //$NON-NLS-1$ - consumeCastExpressionWithPrimitiveType(); - break; + case 636 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); } //$NON-NLS-1$ + consumeCastExpressionWithPrimitiveType(); + break; - case 630 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ - consumeCastExpressionWithGenericsArray(); - break; + case 637 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ + consumeCastExpressionWithGenericsArray(); + break; - case 631 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ - consumeCastExpressionWithQualifiedGenericsArray(); - break; + case 638 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); } //$NON-NLS-1$ + consumeCastExpressionWithQualifiedGenericsArray(); + break; - case 632 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); } //$NON-NLS-1$ - consumeCastExpressionLL1(); - break; + case 639 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); } //$NON-NLS-1$ + consumeCastExpressionLL1(); + break; - case 633 : if (DEBUG) { System.out.println("CastExpression ::= BeginIntersectionCast PushLPAREN..."); } //$NON-NLS-1$ - consumeCastExpressionLL1WithBounds(); - break; + case 640 : if (DEBUG) { System.out.println("CastExpression ::= BeginIntersectionCast PushLPAREN..."); } //$NON-NLS-1$ + consumeCastExpressionLL1WithBounds(); + break; - case 634 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims..."); } //$NON-NLS-1$ - consumeCastExpressionWithNameArray(); - break; + case 641 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims..."); } //$NON-NLS-1$ + consumeCastExpressionWithNameArray(); + break; - case 635 : if (DEBUG) { System.out.println("AdditionalBoundsListOpt ::="); } //$NON-NLS-1$ - consumeZeroAdditionalBounds(); - break; + case 642 : if (DEBUG) { System.out.println("AdditionalBoundsListOpt ::="); } //$NON-NLS-1$ + consumeZeroAdditionalBounds(); + break; - case 639 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); } //$NON-NLS-1$ - consumeOnlyTypeArgumentsForCastExpression(); - break; + case 646 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); } //$NON-NLS-1$ + consumeOnlyTypeArgumentsForCastExpression(); + break; - case 640 : if (DEBUG) { System.out.println("InsideCastExpression ::="); } //$NON-NLS-1$ - consumeInsideCastExpression(); - break; + case 647 : if (DEBUG) { System.out.println("InsideCastExpression ::="); } //$NON-NLS-1$ + consumeInsideCastExpression(); + break; - case 641 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); } //$NON-NLS-1$ - consumeInsideCastExpressionLL1(); - break; + case 648 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); } //$NON-NLS-1$ + consumeInsideCastExpressionLL1(); + break; - case 642 : if (DEBUG) { System.out.println("InsideCastExpressionLL1WithBounds ::="); } //$NON-NLS-1$ - consumeInsideCastExpressionLL1WithBounds (); - break; + case 649 : if (DEBUG) { System.out.println("InsideCastExpressionLL1WithBounds ::="); } //$NON-NLS-1$ + consumeInsideCastExpressionLL1WithBounds (); + break; - case 643 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); } //$NON-NLS-1$ - consumeInsideCastExpressionWithQualifiedGenerics(); - break; + case 650 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); } //$NON-NLS-1$ + consumeInsideCastExpressionWithQualifiedGenerics(); + break; - case 645 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.MULTIPLY); - break; + case 652 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.MULTIPLY); + break; - case 646 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.DIVIDE); - break; + case 653 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.DIVIDE); + break; - case 647 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.REMAINDER); - break; + case 654 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.REMAINDER); + break; - case 649 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.PLUS); - break; + case 656 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.PLUS); + break; - case 650 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.MINUS); - break; + case 657 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.MINUS); + break; - case 652 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.LEFT_SHIFT); - break; + case 659 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.LEFT_SHIFT); + break; - case 653 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); - break; + case 660 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); + break; - case 654 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); - break; + case 661 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); + break; - case 656 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.LESS); - break; + case 663 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.LESS); + break; - case 657 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.GREATER); - break; + case 664 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.GREATER); + break; - case 658 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.LESS_EQUAL); - break; + case 665 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.LESS_EQUAL); + break; - case 659 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.GREATER_EQUAL); - break; + case 666 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.GREATER_EQUAL); + break; - case 661 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); } //$NON-NLS-1$ - consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); - break; + case 668 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); } //$NON-NLS-1$ + consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); + break; - case 662 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); } //$NON-NLS-1$ - consumeEqualityExpression(OperatorIds.NOT_EQUAL); - break; + case 669 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); } //$NON-NLS-1$ + consumeEqualityExpression(OperatorIds.NOT_EQUAL); + break; - case 664 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.AND); - break; + case 671 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.AND); + break; - case 666 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.XOR); - break; + case 673 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.XOR); + break; - case 668 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.OR); - break; + case 675 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.OR); + break; - case 670 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.AND_AND); - break; + case 677 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.AND_AND); + break; - case 672 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.OR_OR); - break; + case 679 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.OR_OR); + break; - case 674 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ - consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; - break; + case 681 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); } //$NON-NLS-1$ + consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; + break; - case 677 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); } //$NON-NLS-1$ - consumeAssignment(); - break; + case 684 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); } //$NON-NLS-1$ + consumeAssignment(); + break; - case 679 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); } //$NON-NLS-1$ - ignoreExpressionAssignment(); - break; + case 686 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); } //$NON-NLS-1$ + ignoreExpressionAssignment(); + break; - case 680 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(EQUAL); - break; + case 687 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(EQUAL); + break; - case 681 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(MULTIPLY); - break; + case 688 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(MULTIPLY); + break; - case 682 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(DIVIDE); - break; + case 689 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(DIVIDE); + break; - case 683 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(REMAINDER); - break; + case 690 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(REMAINDER); + break; - case 684 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(PLUS); - break; + case 691 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(PLUS); + break; - case 685 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(MINUS); - break; + case 692 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(MINUS); + break; - case 686 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(LEFT_SHIFT); - break; + case 693 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(LEFT_SHIFT); + break; - case 687 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(RIGHT_SHIFT); - break; + case 694 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(RIGHT_SHIFT); + break; - case 688 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT); - break; + case 695 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT); + break; - case 689 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(AND); - break; + case 696 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(AND); + break; - case 690 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(XOR); - break; + case 697 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(XOR); + break; - case 691 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); } //$NON-NLS-1$ - consumeAssignmentOperator(OR); - break; + case 698 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); } //$NON-NLS-1$ + consumeAssignmentOperator(OR); + break; - case 692 : if (DEBUG) { System.out.println("Expression ::= AssignmentExpression"); } //$NON-NLS-1$ - consumeExpression(); - break; + case 699 : if (DEBUG) { System.out.println("Expression ::= AssignmentExpression"); } //$NON-NLS-1$ + consumeExpression(); + break; - case 695 : if (DEBUG) { System.out.println("Expressionopt ::="); } //$NON-NLS-1$ - consumeEmptyExpression(); - break; + case 702 : if (DEBUG) { System.out.println("Expressionopt ::="); } //$NON-NLS-1$ + consumeEmptyExpression(); + break; - case 700 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); } //$NON-NLS-1$ - consumeEmptyClassBodyDeclarationsopt(); - break; + case 707 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); } //$NON-NLS-1$ + consumeEmptyClassBodyDeclarationsopt(); + break; - case 701 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ - consumeClassBodyDeclarationsopt(); - break; + case 708 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ + consumeClassBodyDeclarationsopt(); + break; - case 702 : if (DEBUG) { System.out.println("Modifiersopt ::="); } //$NON-NLS-1$ - consumeDefaultModifiers(); - break; + case 709 : if (DEBUG) { System.out.println("Modifiersopt ::="); } //$NON-NLS-1$ + consumeDefaultModifiers(); + break; - case 703 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); } //$NON-NLS-1$ - consumeModifiers(); - break; + case 710 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); } //$NON-NLS-1$ + consumeModifiers(); + break; - case 704 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); } //$NON-NLS-1$ - consumeEmptyBlockStatementsopt(); - break; + case 711 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); } //$NON-NLS-1$ + consumeEmptyBlockStatementsopt(); + break; - case 706 : if (DEBUG) { System.out.println("Dimsopt ::="); } //$NON-NLS-1$ - consumeEmptyDimsopt(); - break; + case 713 : if (DEBUG) { System.out.println("Dimsopt ::="); } //$NON-NLS-1$ + consumeEmptyDimsopt(); + break; - case 708 : if (DEBUG) { System.out.println("ArgumentListopt ::="); } //$NON-NLS-1$ - consumeEmptyArgumentListopt(); - break; + case 715 : if (DEBUG) { System.out.println("ArgumentListopt ::="); } //$NON-NLS-1$ + consumeEmptyArgumentListopt(); + break; - case 712 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); } //$NON-NLS-1$ - consumeFormalParameterListopt(); - break; + case 719 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); } //$NON-NLS-1$ + consumeFormalParameterListopt(); + break; - case 719 : if (DEBUG) { System.out.println("ClassHeaderPermittedSubclasses ::=..."); } //$NON-NLS-1$ - consumeClassHeaderPermittedSubclasses(); - break; + case 726 : if (DEBUG) { System.out.println("ClassHeaderPermittedSubclasses ::=..."); } //$NON-NLS-1$ + consumeClassHeaderPermittedSubclasses(); + break; - case 722 : if (DEBUG) { System.out.println("InterfaceHeaderPermittedSubClassesAndSubInterfaces ::="); } //$NON-NLS-1$ - consumeInterfaceHeaderPermittedSubClassesAndSubInterfaces(); - break; + case 729 : if (DEBUG) { System.out.println("InterfaceHeaderPermittedSubClassesAndSubInterfaces ::="); } //$NON-NLS-1$ + consumeInterfaceHeaderPermittedSubClassesAndSubInterfaces(); + break; - case 723 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); } //$NON-NLS-1$ - consumeEmptyInterfaceMemberDeclarationsopt(); - break; + case 730 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); } //$NON-NLS-1$ + consumeEmptyInterfaceMemberDeclarationsopt(); + break; - case 724 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ - consumeInterfaceMemberDeclarationsopt(); - break; + case 731 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ + consumeInterfaceMemberDeclarationsopt(); + break; - case 725 : if (DEBUG) { System.out.println("NestedType ::="); } //$NON-NLS-1$ - consumeNestedType(); - break; + case 732 : if (DEBUG) { System.out.println("NestedType ::="); } //$NON-NLS-1$ + consumeNestedType(); + break; - case 726 : if (DEBUG) { System.out.println("ForInitopt ::="); } //$NON-NLS-1$ - consumeEmptyForInitopt(); - break; + case 733 : if (DEBUG) { System.out.println("ForInitopt ::="); } //$NON-NLS-1$ + consumeEmptyForInitopt(); + break; - case 728 : if (DEBUG) { System.out.println("ForUpdateopt ::="); } //$NON-NLS-1$ - consumeEmptyForUpdateopt(); - break; + case 735 : if (DEBUG) { System.out.println("ForUpdateopt ::="); } //$NON-NLS-1$ + consumeEmptyForUpdateopt(); + break; - case 732 : if (DEBUG) { System.out.println("Catchesopt ::="); } //$NON-NLS-1$ - consumeEmptyCatchesopt(); - break; + case 739 : if (DEBUG) { System.out.println("Catchesopt ::="); } //$NON-NLS-1$ + consumeEmptyCatchesopt(); + break; - case 734 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); } //$NON-NLS-1$ - consumeEnumDeclaration(); - break; + case 741 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); } //$NON-NLS-1$ + consumeEnumDeclaration(); + break; - case 735 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); } //$NON-NLS-1$ - consumeEnumHeader(); - break; + case 742 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); } //$NON-NLS-1$ + consumeEnumHeader(); + break; - case 736 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); } //$NON-NLS-1$ - consumeEnumHeaderName(); - break; + case 743 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); } //$NON-NLS-1$ + consumeEnumHeaderName(); + break; - case 737 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); } //$NON-NLS-1$ - consumeEnumHeaderNameWithTypeParameters(); - break; + case 744 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); } //$NON-NLS-1$ + consumeEnumHeaderNameWithTypeParameters(); + break; - case 738 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); } //$NON-NLS-1$ - consumeEnumBodyNoConstants(); - break; + case 745 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); } //$NON-NLS-1$ + consumeEnumBodyNoConstants(); + break; - case 739 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); } //$NON-NLS-1$ - consumeEnumBodyNoConstants(); - break; + case 746 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); } //$NON-NLS-1$ + consumeEnumBodyNoConstants(); + break; - case 740 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); } //$NON-NLS-1$ - consumeEnumBodyWithConstants(); - break; + case 747 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); } //$NON-NLS-1$ + consumeEnumBodyWithConstants(); + break; - case 741 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); } //$NON-NLS-1$ - consumeEnumBodyWithConstants(); - break; + case 748 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); } //$NON-NLS-1$ + consumeEnumBodyWithConstants(); + break; - case 743 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); } //$NON-NLS-1$ - consumeEnumConstants(); - break; + case 750 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); } //$NON-NLS-1$ + consumeEnumConstants(); + break; - case 744 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); } //$NON-NLS-1$ - consumeEnumConstantHeaderName(); - break; + case 751 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); } //$NON-NLS-1$ + consumeEnumConstantHeaderName(); + break; - case 745 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); } //$NON-NLS-1$ - consumeEnumConstantHeader(); - break; + case 752 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); } //$NON-NLS-1$ + consumeEnumConstantHeader(); + break; - case 746 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); } //$NON-NLS-1$ - consumeEnumConstantWithClassBody(); - break; + case 753 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); } //$NON-NLS-1$ + consumeEnumConstantWithClassBody(); + break; - case 747 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); } //$NON-NLS-1$ - consumeEnumConstantNoClassBody(); - break; + case 754 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); } //$NON-NLS-1$ + consumeEnumConstantNoClassBody(); + break; - case 748 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ - consumeArguments(); - break; + case 755 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); } //$NON-NLS-1$ + consumeArguments(); + break; - case 749 : if (DEBUG) { System.out.println("Argumentsopt ::="); } //$NON-NLS-1$ - consumeEmptyArguments(); - break; + case 756 : if (DEBUG) { System.out.println("Argumentsopt ::="); } //$NON-NLS-1$ + consumeEmptyArguments(); + break; - case 751 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); } //$NON-NLS-1$ - consumeEnumDeclarations(); - break; + case 758 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); } //$NON-NLS-1$ + consumeEnumDeclarations(); + break; - case 752 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); } //$NON-NLS-1$ - consumeEmptyEnumDeclarations(); - break; + case 759 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); } //$NON-NLS-1$ + consumeEmptyEnumDeclarations(); + break; - case 754 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); } //$NON-NLS-1$ - consumeEnhancedForStatement(); - break; + case 761 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); } //$NON-NLS-1$ + consumeEnhancedForStatement(); + break; - case 755 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); } //$NON-NLS-1$ - consumeEnhancedForStatement(); - break; + case 762 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); } //$NON-NLS-1$ + consumeEnhancedForStatement(); + break; - case 756 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); } //$NON-NLS-1$ - consumeEnhancedForStatementHeaderInit(false); - break; + case 763 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); } //$NON-NLS-1$ + consumeEnhancedForStatementHeaderInit(false); + break; - case 757 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); } //$NON-NLS-1$ - consumeEnhancedForStatementHeaderInit(true); - break; + case 764 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); } //$NON-NLS-1$ + consumeEnhancedForStatementHeaderInit(true); + break; - case 758 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); } //$NON-NLS-1$ - consumeEnhancedForStatementHeader(); - break; + case 765 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); } //$NON-NLS-1$ + consumeEnhancedForStatementHeader(); + break; - case 759 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInitRecord ::= for LPAREN..."); } //$NON-NLS-1$ - consumeEnhancedForStatementHeaderInitRecord(false); - break; + case 766 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInitRecord ::= for LPAREN..."); } //$NON-NLS-1$ + consumeEnhancedForStatementHeaderInitRecord(false); + break; - case 760 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInitRecord ::= for LPAREN..."); } //$NON-NLS-1$ - consumeEnhancedForStatementHeaderInitRecord(true); - break; + case 767 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInitRecord ::= for LPAREN..."); } //$NON-NLS-1$ + consumeEnhancedForStatementHeaderInitRecord(true); + break; - case 761 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); } //$NON-NLS-1$ - consumeEnhancedForStatementHeader(); - break; + case 768 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); } //$NON-NLS-1$ + consumeEnhancedForStatementHeader(); + break; - case 762 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); } //$NON-NLS-1$ - consumeImportDeclaration(); - break; + case 769 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); } //$NON-NLS-1$ + consumeImportDeclaration(); + break; - case 763 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); } //$NON-NLS-1$ - consumeSingleStaticImportDeclarationName(); - break; + case 770 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); } //$NON-NLS-1$ + consumeSingleStaticImportDeclarationName(); + break; - case 764 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); } //$NON-NLS-1$ - consumeImportDeclaration(); - break; + case 771 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); } //$NON-NLS-1$ + consumeImportDeclaration(); + break; - case 765 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); } //$NON-NLS-1$ - consumeStaticImportOnDemandDeclarationName(); - break; + case 772 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); } //$NON-NLS-1$ + consumeStaticImportOnDemandDeclarationName(); + break; - case 766 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ - consumeTypeArguments(); - break; + case 773 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ + consumeTypeArguments(); + break; - case 767 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ - consumeOnlyTypeArguments(); - break; + case 774 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); } //$NON-NLS-1$ + consumeOnlyTypeArguments(); + break; - case 769 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ - consumeTypeArgumentList1(); - break; + case 776 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ + consumeTypeArgumentList1(); + break; - case 771 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); } //$NON-NLS-1$ - consumeTypeArgumentList(); - break; + case 778 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); } //$NON-NLS-1$ + consumeTypeArgumentList(); + break; - case 772 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); } //$NON-NLS-1$ - consumeTypeArgument(); - break; + case 779 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); } //$NON-NLS-1$ + consumeTypeArgument(); + break; - case 776 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); } //$NON-NLS-1$ - consumeReferenceType1(); - break; + case 783 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); } //$NON-NLS-1$ + consumeReferenceType1(); + break; - case 777 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ - consumeTypeArgumentReferenceType1(); - break; + case 784 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ + consumeTypeArgumentReferenceType1(); + break; - case 779 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ - consumeTypeArgumentList2(); - break; + case 786 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ + consumeTypeArgumentList2(); + break; - case 782 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); } //$NON-NLS-1$ - consumeReferenceType2(); - break; + case 789 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); } //$NON-NLS-1$ + consumeReferenceType2(); + break; - case 783 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ - consumeTypeArgumentReferenceType2(); - break; + case 790 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); } //$NON-NLS-1$ + consumeTypeArgumentReferenceType2(); + break; - case 785 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ - consumeTypeArgumentList3(); - break; + case 792 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); } //$NON-NLS-1$ + consumeTypeArgumentList3(); + break; - case 788 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ - consumeReferenceType3(); - break; + case 795 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); } //$NON-NLS-1$ + consumeReferenceType3(); + break; - case 789 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION"); } //$NON-NLS-1$ - consumeWildcard(); - break; + case 796 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION"); } //$NON-NLS-1$ + consumeWildcard(); + break; - case 790 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION WildcardBounds"); } //$NON-NLS-1$ - consumeWildcardWithBounds(); - break; + case 797 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION WildcardBounds"); } //$NON-NLS-1$ + consumeWildcardWithBounds(); + break; - case 791 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); } //$NON-NLS-1$ - consumeWildcardBoundsExtends(); - break; + case 798 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); } //$NON-NLS-1$ + consumeWildcardBoundsExtends(); + break; - case 792 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); } //$NON-NLS-1$ - consumeWildcardBoundsSuper(); - break; + case 799 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); } //$NON-NLS-1$ + consumeWildcardBoundsSuper(); + break; - case 793 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION GREATER"); } //$NON-NLS-1$ - consumeWildcard1(); - break; + case 800 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION GREATER"); } //$NON-NLS-1$ + consumeWildcard1(); + break; - case 794 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ - consumeWildcard1WithBounds(); - break; + case 801 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + consumeWildcard1WithBounds(); + break; - case 795 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); } //$NON-NLS-1$ - consumeWildcardBounds1Extends(); - break; + case 802 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); } //$NON-NLS-1$ + consumeWildcardBounds1Extends(); + break; - case 796 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); } //$NON-NLS-1$ - consumeWildcardBounds1Super(); - break; + case 803 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); } //$NON-NLS-1$ + consumeWildcardBounds1Super(); + break; - case 797 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION RIGHT_SHIFT"); } //$NON-NLS-1$ - consumeWildcard2(); - break; + case 804 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION RIGHT_SHIFT"); } //$NON-NLS-1$ + consumeWildcard2(); + break; - case 798 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ - consumeWildcard2WithBounds(); - break; + case 805 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + consumeWildcard2WithBounds(); + break; - case 799 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); } //$NON-NLS-1$ - consumeWildcardBounds2Extends(); - break; + case 806 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); } //$NON-NLS-1$ + consumeWildcardBounds2Extends(); + break; - case 800 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); } //$NON-NLS-1$ - consumeWildcardBounds2Super(); - break; + case 807 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); } //$NON-NLS-1$ + consumeWildcardBounds2Super(); + break; - case 801 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ - consumeWildcard3(); - break; + case 808 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + consumeWildcard3(); + break; - case 802 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ - consumeWildcard3WithBounds(); - break; + case 809 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); } //$NON-NLS-1$ + consumeWildcard3WithBounds(); + break; - case 803 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); } //$NON-NLS-1$ - consumeWildcardBounds3Extends(); - break; + case 810 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); } //$NON-NLS-1$ + consumeWildcardBounds3Extends(); + break; - case 804 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); } //$NON-NLS-1$ - consumeWildcardBounds3Super(); - break; + case 811 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); } //$NON-NLS-1$ + consumeWildcardBounds3Super(); + break; - case 805 : if (DEBUG) { System.out.println("TypeParameterHeader ::= TypeAnnotationsopt Identifier"); } //$NON-NLS-1$ - consumeTypeParameterHeader(); - break; + case 812 : if (DEBUG) { System.out.println("TypeParameterHeader ::= TypeAnnotationsopt Identifier"); } //$NON-NLS-1$ + consumeTypeParameterHeader(); + break; - case 806 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); } //$NON-NLS-1$ - consumeTypeParameters(); - break; + case 813 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); } //$NON-NLS-1$ + consumeTypeParameters(); + break; - case 808 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ - consumeTypeParameterList(); - break; + case 815 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ + consumeTypeParameterList(); + break; - case 810 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ - consumeTypeParameterWithExtends(); - break; + case 817 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + consumeTypeParameterWithExtends(); + break; - case 811 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ - consumeTypeParameterWithExtendsAndBounds(); - break; + case 818 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + consumeTypeParameterWithExtendsAndBounds(); + break; - case 813 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); } //$NON-NLS-1$ - consumeAdditionalBoundList(); - break; + case 820 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); } //$NON-NLS-1$ + consumeAdditionalBoundList(); + break; - case 814 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); } //$NON-NLS-1$ - consumeAdditionalBound(); - break; + case 821 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); } //$NON-NLS-1$ + consumeAdditionalBound(); + break; - case 816 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ - consumeTypeParameterList1(); - break; + case 823 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); } //$NON-NLS-1$ + consumeTypeParameterList1(); + break; - case 817 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); } //$NON-NLS-1$ - consumeTypeParameter1(); - break; + case 824 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); } //$NON-NLS-1$ + consumeTypeParameter1(); + break; - case 818 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ - consumeTypeParameter1WithExtends(); - break; + case 825 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + consumeTypeParameter1WithExtends(); + break; - case 819 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ - consumeTypeParameter1WithExtendsAndBounds(); - break; + case 826 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); } //$NON-NLS-1$ + consumeTypeParameter1WithExtendsAndBounds(); + break; - case 821 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); } //$NON-NLS-1$ - consumeAdditionalBoundList1(); - break; + case 828 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); } //$NON-NLS-1$ + consumeAdditionalBoundList1(); + break; - case 822 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); } //$NON-NLS-1$ - consumeAdditionalBound1(); - break; + case 829 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); } //$NON-NLS-1$ + consumeAdditionalBound1(); + break; - case 828 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.PLUS); - break; + case 835 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.PLUS); + break; - case 829 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.MINUS); - break; + case 836 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.MINUS); + break; - case 832 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.TWIDDLE); - break; + case 839 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.TWIDDLE); + break; - case 833 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); } //$NON-NLS-1$ - consumeUnaryExpression(OperatorIds.NOT); - break; + case 840 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); } //$NON-NLS-1$ + consumeUnaryExpression(OperatorIds.NOT); + break; - case 836 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.MULTIPLY); - break; + case 843 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.MULTIPLY); + break; - case 837 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.MULTIPLY); - break; + case 844 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.MULTIPLY); + break; - case 838 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.DIVIDE); - break; + case 845 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.DIVIDE); + break; - case 839 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.DIVIDE); - break; + case 846 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.DIVIDE); + break; - case 840 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.REMAINDER); - break; + case 847 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.REMAINDER); + break; - case 841 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.REMAINDER); - break; + case 848 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.REMAINDER); + break; - case 843 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.PLUS); - break; + case 850 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.PLUS); + break; - case 844 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.PLUS); - break; + case 851 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.PLUS); + break; - case 845 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.MINUS); - break; + case 852 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.MINUS); + break; - case 846 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.MINUS); - break; + case 853 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.MINUS); + break; - case 848 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.LEFT_SHIFT); - break; + case 855 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.LEFT_SHIFT); + break; - case 849 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.LEFT_SHIFT); - break; + case 856 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.LEFT_SHIFT); + break; - case 850 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); - break; + case 857 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); + break; - case 851 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.RIGHT_SHIFT); - break; + case 858 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.RIGHT_SHIFT); + break; - case 852 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); - break; + case 859 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); + break; - case 853 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.UNSIGNED_RIGHT_SHIFT); - break; + case 860 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.UNSIGNED_RIGHT_SHIFT); + break; - case 855 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.LESS); - break; + case 862 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.LESS); + break; - case 856 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.LESS); - break; + case 863 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.LESS); + break; - case 857 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.GREATER); - break; + case 864 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.GREATER); + break; - case 858 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.GREATER); - break; + case 865 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.GREATER); + break; - case 859 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.LESS_EQUAL); - break; + case 866 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.LESS_EQUAL); + break; - case 860 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.LESS_EQUAL); - break; + case 867 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.LESS_EQUAL); + break; - case 861 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.GREATER_EQUAL); - break; + case 868 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.GREATER_EQUAL); + break; - case 862 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.GREATER_EQUAL); - break; + case 869 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.GREATER_EQUAL); + break; - case 864 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name InstanceofRHS"); } //$NON-NLS-1$ - consumeInstanceOfExpressionWithName(); - break; + case 871 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name InstanceofRHS"); } //$NON-NLS-1$ + consumeInstanceOfExpressionWithName(); + break; - case 865 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeInstanceOfExpression(); - break; + case 872 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeInstanceOfExpression(); + break; - case 867 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); - break; + case 874 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); + break; - case 868 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); } //$NON-NLS-1$ - consumeEqualityExpressionWithName(OperatorIds.EQUAL_EQUAL); - break; + case 875 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); } //$NON-NLS-1$ + consumeEqualityExpressionWithName(OperatorIds.EQUAL_EQUAL); + break; - case 869 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeEqualityExpression(OperatorIds.NOT_EQUAL); - break; + case 876 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeEqualityExpression(OperatorIds.NOT_EQUAL); + break; - case 870 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); } //$NON-NLS-1$ - consumeEqualityExpressionWithName(OperatorIds.NOT_EQUAL); - break; + case 877 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); } //$NON-NLS-1$ + consumeEqualityExpressionWithName(OperatorIds.NOT_EQUAL); + break; - case 872 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.AND); - break; + case 879 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.AND); + break; - case 873 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.AND); - break; + case 880 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.AND); + break; - case 875 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.XOR); - break; + case 882 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.XOR); + break; - case 876 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.XOR); - break; + case 883 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.XOR); + break; - case 878 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.OR); - break; + case 885 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.OR); + break; - case 879 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.OR); - break; + case 886 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.OR); + break; - case 881 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.AND_AND); - break; + case 888 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.AND_AND); + break; - case 882 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.AND_AND); - break; + case 889 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.AND_AND); + break; - case 884 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeBinaryExpression(OperatorIds.OR_OR); - break; + case 891 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeBinaryExpression(OperatorIds.OR_OR); + break; - case 885 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); } //$NON-NLS-1$ - consumeBinaryExpressionWithName(OperatorIds.OR_OR); - break; + case 892 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); } //$NON-NLS-1$ + consumeBinaryExpressionWithName(OperatorIds.OR_OR); + break; - case 887 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); } //$NON-NLS-1$ - consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; - break; + case 894 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); } //$NON-NLS-1$ + consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; + break; - case 888 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); } //$NON-NLS-1$ - consumeConditionalExpressionWithName(OperatorIds.QUESTIONCOLON) ; - break; + case 895 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); } //$NON-NLS-1$ + consumeConditionalExpressionWithName(OperatorIds.QUESTIONCOLON) ; + break; - case 892 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ - consumeAnnotationTypeDeclarationHeaderName() ; - break; + case 899 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ + consumeAnnotationTypeDeclarationHeaderName() ; + break; - case 893 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ - consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ; - break; + case 900 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); } //$NON-NLS-1$ + consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ; + break; - case 894 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ - consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ; - break; + case 901 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ + consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ; + break; - case 895 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ - consumeAnnotationTypeDeclarationHeaderName() ; - break; + case 902 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); } //$NON-NLS-1$ + consumeAnnotationTypeDeclarationHeaderName() ; + break; - case 896 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); } //$NON-NLS-1$ - consumeAnnotationTypeDeclarationHeader() ; - break; + case 903 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); } //$NON-NLS-1$ + consumeAnnotationTypeDeclarationHeader() ; + break; - case 897 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); } //$NON-NLS-1$ - consumeAnnotationTypeDeclaration() ; - break; + case 904 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); } //$NON-NLS-1$ + consumeAnnotationTypeDeclaration() ; + break; - case 899 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); } //$NON-NLS-1$ - consumeEmptyAnnotationTypeMemberDeclarationsopt() ; - break; + case 906 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); } //$NON-NLS-1$ + consumeEmptyAnnotationTypeMemberDeclarationsopt() ; + break; - case 900 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ - consumeAnnotationTypeMemberDeclarationsopt() ; - break; + case 907 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); } //$NON-NLS-1$ + consumeAnnotationTypeMemberDeclarationsopt() ; + break; - case 902 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); } //$NON-NLS-1$ - consumeAnnotationTypeMemberDeclarations() ; - break; + case 909 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); } //$NON-NLS-1$ + consumeAnnotationTypeMemberDeclarations() ; + break; - case 903 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); } //$NON-NLS-1$ - consumeMethodHeaderNameWithTypeParameters(true); - break; + case 910 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); } //$NON-NLS-1$ + consumeMethodHeaderNameWithTypeParameters(true); + break; - case 904 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeMethodHeaderName(true); - break; + case 911 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeMethodHeaderName(true); + break; - case 905 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); } //$NON-NLS-1$ - consumeEmptyMethodHeaderDefaultValue() ; - break; + case 912 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); } //$NON-NLS-1$ + consumeEmptyMethodHeaderDefaultValue() ; + break; - case 906 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); } //$NON-NLS-1$ - consumeMethodHeaderDefaultValue(); - break; + case 913 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); } //$NON-NLS-1$ + consumeMethodHeaderDefaultValue(); + break; - case 907 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); } //$NON-NLS-1$ - consumeMethodHeader(); - break; + case 914 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); } //$NON-NLS-1$ + consumeMethodHeader(); + break; - case 908 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); } //$NON-NLS-1$ - consumeAnnotationTypeMemberDeclaration() ; - break; + case 915 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); } //$NON-NLS-1$ + consumeAnnotationTypeMemberDeclaration() ; + break; - case 916 : if (DEBUG) { System.out.println("AnnotationName ::= AT UnannotatableName"); } //$NON-NLS-1$ - consumeAnnotationName() ; - break; + case 923 : if (DEBUG) { System.out.println("AnnotationName ::= AT UnannotatableName"); } //$NON-NLS-1$ + consumeAnnotationName() ; + break; - case 917 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ - consumeNormalAnnotation(false) ; - break; + case 924 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ + consumeNormalAnnotation(false) ; + break; - case 918 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); } //$NON-NLS-1$ - consumeEmptyMemberValuePairsopt() ; - break; + case 925 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); } //$NON-NLS-1$ + consumeEmptyMemberValuePairsopt() ; + break; - case 921 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); } //$NON-NLS-1$ - consumeMemberValuePairs() ; - break; + case 928 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); } //$NON-NLS-1$ + consumeMemberValuePairs() ; + break; - case 922 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); } //$NON-NLS-1$ - consumeMemberValuePair() ; - break; + case 929 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); } //$NON-NLS-1$ + consumeMemberValuePair() ; + break; - case 923 : if (DEBUG) { System.out.println("EnterMemberValue ::="); } //$NON-NLS-1$ - consumeEnterMemberValue() ; - break; + case 930 : if (DEBUG) { System.out.println("EnterMemberValue ::="); } //$NON-NLS-1$ + consumeEnterMemberValue() ; + break; - case 924 : if (DEBUG) { System.out.println("ExitMemberValue ::="); } //$NON-NLS-1$ - consumeExitMemberValue() ; - break; + case 931 : if (DEBUG) { System.out.println("ExitMemberValue ::="); } //$NON-NLS-1$ + consumeExitMemberValue() ; + break; - case 926 : if (DEBUG) { System.out.println("MemberValue ::= Name"); } //$NON-NLS-1$ - consumeMemberValueAsName() ; - break; + case 933 : if (DEBUG) { System.out.println("MemberValue ::= Name"); } //$NON-NLS-1$ + consumeMemberValueAsName() ; + break; - case 929 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ - consumeMemberValueArrayInitializer() ; - break; + case 936 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + consumeMemberValueArrayInitializer() ; + break; - case 930 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ - consumeMemberValueArrayInitializer() ; - break; + case 937 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + consumeMemberValueArrayInitializer() ; + break; - case 931 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ - consumeEmptyMemberValueArrayInitializer() ; - break; + case 938 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + consumeEmptyMemberValueArrayInitializer() ; + break; - case 932 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ - consumeEmptyMemberValueArrayInitializer() ; - break; + case 939 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); } //$NON-NLS-1$ + consumeEmptyMemberValueArrayInitializer() ; + break; - case 933 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); } //$NON-NLS-1$ - consumeEnterMemberValueArrayInitializer() ; - break; + case 940 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); } //$NON-NLS-1$ + consumeEnterMemberValueArrayInitializer() ; + break; - case 935 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); } //$NON-NLS-1$ - consumeMemberValues() ; - break; + case 942 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); } //$NON-NLS-1$ + consumeMemberValues() ; + break; - case 936 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); } //$NON-NLS-1$ - consumeMarkerAnnotation(false) ; - break; + case 943 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); } //$NON-NLS-1$ + consumeMarkerAnnotation(false) ; + break; - case 937 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); } //$NON-NLS-1$ - consumeSingleMemberAnnotationMemberValue() ; - break; + case 944 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); } //$NON-NLS-1$ + consumeSingleMemberAnnotationMemberValue() ; + break; - case 938 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ - consumeSingleMemberAnnotation(false) ; - break; + case 945 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); } //$NON-NLS-1$ + consumeSingleMemberAnnotation(false) ; + break; - case 939 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); } //$NON-NLS-1$ - consumeRecoveryMethodHeaderNameWithTypeParameters(); - break; + case 946 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); } //$NON-NLS-1$ + consumeRecoveryMethodHeaderNameWithTypeParameters(); + break; - case 940 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ - consumeRecoveryMethodHeaderName(); - break; + case 947 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); } //$NON-NLS-1$ + consumeRecoveryMethodHeaderName(); + break; - case 941 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault..."); } //$NON-NLS-1$ - consumeRecoveryMethodHeaderNameWithTypeParameters(); - break; + case 948 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault..."); } //$NON-NLS-1$ + consumeRecoveryMethodHeaderNameWithTypeParameters(); + break; - case 942 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault Type"); } //$NON-NLS-1$ - consumeRecoveryMethodHeaderName(); - break; + case 949 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault Type"); } //$NON-NLS-1$ + consumeRecoveryMethodHeaderName(); + break; - case 943 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ - consumeMethodHeader(); - break; + case 950 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ + consumeMethodHeader(); + break; - case 944 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ - consumeMethodHeader(); - break; + case 951 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); } //$NON-NLS-1$ + consumeMethodHeader(); + break; + } } -} // END_AUTOGENERATED_REGION_CONSUME_RULE @@ -9947,9 +9984,54 @@ protected void consumeStaticOnly() { this.recoveredStaticInitializerStart = this.intStack[this.intPtr]; // remember start position only for static initializers } } -protected void consumeTextBlock() { +private void consumeTemplate(int token) { + List components = this.scanner.getCurrentTemplateComponents(); + int size = components.size(); + StringLiteral[] fragments = new StringLiteral[size/2 + 1]; + char[][] textBlockFraments = new char[size/2 + 1][]; + Expression[] expressions = new Expression[size/2]; + boolean isMultiline = token == TerminalTokens.TokenNameTextBlockTemplate; + for (int i = 0, fi = 0, ei = 0; i < size; i++) { + IStringTemplateComponent component = components.get(i); + if (component instanceof TextFragment tf) { + StringLiteral s; + if (isMultiline) { + s = createTextBlock(tf.text(), tf.start(), tf.end()); + } else { + s = new StringLiteral(tf.text(), tf.start(), tf.end(), + Util.getLineNumber(this.scanner.startPosition, this.scanner.lineEnds, 0, this.scanner.linePtr)); + } + fragments[fi] = s; + textBlockFraments[fi++] = tf.text(); + } else { // embedded expression coordinates + EmbeddedExpression expComp = (EmbeddedExpression) component; + final Parser parser = new Parser(this.problemReporter, false); + int length = expComp.end() - expComp.start(); + expressions[ei++] = parser.parseExpression(this.scanner.source, expComp.start(), length, this.compilationUnit, false, true); + } + } + if (isMultiline) { + int textBlockIndent = TextBlock.getIndentForFragments(textBlockFraments); + for(int index = 0; index < fragments.length; index++) { + StringLiteral literal = fragments[index]; + char[][] lines = TextBlock.convertTextBlockToLines(fragments[index].source()); + char[] formattedText = TextBlock.formatTextBlock(lines, textBlockIndent, index > 0, index+1 < fragments.length); + literal.source = formattedText; + } + } + // get rid of all the cached values + this.scanner.withoutUnicodePtr = 0; + this.scanner.textBlockOffset = -1; + StringTemplate template = new StringTemplate(fragments, expressions, fragments[0].sourceStart, fragments[expressions.length].sourceEnd, isMultiline); + pushOnExpressionStack(template); +} +private void consumeTextBlock() { problemReporter().validateJavaFeatureSupport(JavaFeature.TEXT_BLOCKS, this.scanner.startPosition, this.scanner.currentPosition - 1); - char[] textBlock2 = this.scanner.getCurrentTextBlock(); + char[] allchars = this.scanner.getCurrentTextBlock(); + TextBlock textBlock = createTextBlock(allchars, this.scanner.startPosition, this.scanner.currentPosition - 1); + pushOnExpressionStack(textBlock); +} +private TextBlock createTextBlock(char[] allchars, int start, int end) { TextBlock textBlock; if (this.recordStringLiterals && !this.reparsingLambdaExpression && @@ -9957,23 +10039,22 @@ protected void consumeTextBlock() { this.lastPosistion < this.scanner.currentPosition && !this.statementRecoveryActivated) { textBlock = - new TextBlock( - textBlock2, - this.scanner.startPosition, - this.scanner.currentPosition - 1, + TextBlock.createTextBlock( + allchars, + start, + end, Util.getLineNumber(this.scanner.startPosition, this.scanner.lineEnds, 0, this.scanner.linePtr), Util.getLineNumber(this.scanner.currentPosition - 1, this.scanner.lineEnds, 0, this.scanner.linePtr)); this.compilationUnit.recordStringLiteral(textBlock, this.currentElement != null); } else { - textBlock = new TextBlock( - textBlock2, - this.scanner.startPosition, - this.scanner.currentPosition - 1, + textBlock = TextBlock.createTextBlock( + allchars, + start, + end, 0, 0); } - pushOnExpressionStack(textBlock); - // Regardless of the error reported above, we have to push the ast node accordingly + return textBlock; } protected void consumeSwitchBlock() { // SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}' @@ -10396,6 +10477,10 @@ protected void consumeToken(int type) { this.scanner.startPosition, this.scanner.currentPosition - 1)); break; + case TokenNameStringTemplate : + case TokenNameTextBlockTemplate : + consumeTemplate(type); + break; case TokenNameStringLiteral : StringLiteral stringLiteral; if (this.recordStringLiterals && @@ -13694,6 +13779,9 @@ public char[][] parsePackageDeclaration(char[] source, CompilationResult result) } public Expression parseExpression(char[] source, int offset, int length, CompilationUnitDeclaration unit, boolean recordLineSeparators) { + return parseExpression(source, offset, length, unit, recordLineSeparators, false); +} +private Expression parseExpression(char[] source, int offset, int length, CompilationUnitDeclaration unit, boolean recordLineSeparators, boolean embeddedExpression) { initialize(); goForExpression(recordLineSeparators); @@ -13705,6 +13793,19 @@ public Expression parseExpression(char[] source, int offset, int length, Compila this.scanner.setSource(source); this.scanner.resetTo(offset, offset + length - 1); try { + if (embeddedExpression) { + int nextToken; + try { + nextToken = this.scanner.getNextToken(); + } catch(InvalidInputException iie) { + return null; + } + if (nextToken == TokenNameEOF) { + return new NullLiteral(offset, offset + length - 1); + } else { + this.scanner.resetTo(offset, offset + length - 1); + } + } parse(); } catch (AbortCompilation ex) { this.lastAct = ERROR_ACTION; @@ -14733,3 +14834,4 @@ public boolean isParsingModuleDeclaration() { return (this.parsingJava9Plus && this.compilationUnit != null && this.compilationUnit.isModuleInfo()); } } + 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 6e8269c979b..ce28bd45644 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 @@ -20,22 +20,22 @@ public interface ParserBasicInformation { public final static int // BEGIN_AUTOGENERATED_REGION - ERROR_SYMBOL = 138, + ERROR_SYMBOL = 140, MAX_NAME_LENGTH = 53, - NUM_STATES = 1237, + NUM_STATES = 1257, - NT_OFFSET = 138, - SCOPE_UBOUND = 321, - SCOPE_SIZE = 322, - LA_STATE_OFFSET = 18335, + NT_OFFSET = 140, + SCOPE_UBOUND = 322, + SCOPE_SIZE = 323, + LA_STATE_OFFSET = 18660, MAX_LA = 1, - NUM_RULES = 944, - NUM_TERMINALS = 138, - NUM_NON_TERMINALS = 436, - NUM_SYMBOLS = 574, - START_STATE = 1266, - EOFT_SYMBOL = 64, - EOLT_SYMBOL = 64, - ACCEPT_ACTION = 18334, - ERROR_ACTION = 18335; + NUM_RULES = 951, + NUM_TERMINALS = 140, + NUM_NON_TERMINALS = 438, + NUM_SYMBOLS = 578, + START_STATE = 1013, + EOFT_SYMBOL = 63, + EOLT_SYMBOL = 63, + ACCEPT_ACTION = 18659, + ERROR_ACTION = 18660; } 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 0c285dfc80e..98eea9ea139 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 @@ -27,6 +27,7 @@ import org.eclipse.jdt.internal.compiler.CompilationResult; import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies; import org.eclipse.jdt.internal.compiler.ast.Statement; +import org.eclipse.jdt.internal.compiler.ast.TextBlock; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; import org.eclipse.jdt.internal.compiler.impl.JavaFeature; @@ -207,7 +208,7 @@ enum ScanContext { public static final int LOW_SURROGATE_MAX_VALUE = 0xDFFF; // text block support - 13 - protected int rawStart = -1; + protected int textBlockOffset = -1; //Java 15 - first _ keyword appears Map _Keywords = null; @@ -516,6 +517,29 @@ public final String getCurrentTokenString() { this.startPosition, this.currentPosition - this.startPosition); } +public char[] getCurrentTokenInRange(int start, int end) { + char[] result; + if (this.withoutUnicodePtr != 0) { + if (this.textBlockOffset > 0) { + System.arraycopy(this.withoutUnicodeBuffer, this.textBlockOffset + 1, + result = new char[this.withoutUnicodePtr - this.textBlockOffset], 0, this.withoutUnicodePtr - this.textBlockOffset); + } else { + // 0 is used as a fast test flag so the real first char is in position 1 + System.arraycopy(this.withoutUnicodeBuffer, 2, + //2 is 1 (real start) + 1 (to jump over the ") + result = new char[this.withoutUnicodePtr - 2], 0, this.withoutUnicodePtr - 2); + } + } else { + int length; + System.arraycopy( + this.source, + this.startPosition + 1, + result = new char[length = end - start + 1], + 0, + length); + } + return result; +} public char[] getCurrentTokenSourceString() { //return the token REAL source (aka unicodes are precomputed). //REMOVE the two " that are at the beginning and the end. @@ -574,230 +598,21 @@ protected final boolean scanForTextBlockClose() throws InvalidInputException { return false; } public char[] getCurrentTextBlock() { - // 1. Normalize, i.e. convert all CR CRLF to LF + char[][] lines = getCurrentTextBlockAsLines(); + int indent = TextBlock.getTextBlockIndent(lines); + return TextBlock.formatTextBlock(lines, indent); +} +protected char[][] getCurrentTextBlockAsLines() { char[] all; if (this.withoutUnicodePtr != 0) { - all = CharOperation.subarray(this.withoutUnicodeBuffer, this.rawStart + 1, this.withoutUnicodePtr + 1 ); + all = CharOperation.subarray(this.withoutUnicodeBuffer, this.textBlockOffset + 1, this.withoutUnicodePtr + 1 ); } else { - all = CharOperation.subarray(this.source, this.startPosition + this.rawStart, this.currentPosition - 3); + all = CharOperation.subarray(this.source, this.startPosition + this.textBlockOffset, this.currentPosition - 3); if (all == null) { all = new char[0]; } } - all = normalize(all); - // 2. Split into lines. Consider both \n and \r as line separators - char[][] lines = CharOperation.splitOn('\n', all); - int size = lines.length; - List list = new ArrayList<>(lines.length); - for(int i = 0; i < lines.length; i++) { - char[] line = lines[i]; - if (i + 1 == size && line.length == 0) { - list.add(line); - break; - } - char[][] sub = CharOperation.splitOn('\r', line); - if (sub.length == 0) { - list.add(line); - } else { - for (char[] cs : sub) { - list.add(cs); - } - } - } - size = list.size(); - lines = list.toArray(new char[size][]); - - // 3. Handle incidental white space - // 3.1. Split into lines and identify determining lines - int prefix = -1; - for(int i = 0; i < size; i++) { - char[] line = lines[i]; - boolean blank = true; - int whitespaces = 0; - for (char c : line) { - if (blank) { - if (ScannerHelper.isWhitespace(c)) { - whitespaces++; - } else { - blank = false; - } - } - } - // The last line with closing delimiter is part of the - // determining line list even if empty - if (!blank || (i+1 == size)) { - if (prefix < 0 || whitespaces < prefix) { - prefix = whitespaces; - } - } - } - // 3.2. Remove the common white space prefix - // 4. Handle escape sequences that are not already done in getNextToken0() - if (prefix == -1) - prefix = 0; - StringBuilder result = new StringBuilder(); - boolean newLine = false; - for(int i = 0; i < lines.length; i++) { - char[] l = lines[i]; - // Remove the common prefix from each line - // And remove all trailing whitespace - // Finally append the \n at the end of the line (except the last line) - int length = l.length; - int trail = length; - for(;trail > 0;) { - if (!ScannerHelper.isWhitespace(l[trail-1])) { - break; - } - trail--; - } - if (i >= (size -1)) { - if (newLine) result.append('\n'); - if (trail < prefix) - continue; - newLine = getLineContent(result, l, prefix, trail-1, false, true); - } else { - if (i > 0 && newLine) - result.append('\n'); - if (trail <= prefix) { - newLine = true; - } else { - boolean merge = length > 0 && l[length - 1] == '\\'; - newLine = getLineContent(result, l, prefix, trail-1, merge, false); - } - } - } - // get rid of all the cached values - this.rawStart = -1; - return result.toString().toCharArray(); -} -private char[] normalize(char[] content) { - StringBuilder result = new StringBuilder(); - boolean isCR = false; - for (char c : content) { - switch (c) { - case '\r': - result.append(c); - isCR = true; - break; - case '\n': - if (!isCR) { - result.append(c); - } - isCR = false; - break; - default: - result.append(c); - isCR = false; - break; - } - } - return result.toString().toCharArray(); -} -// This method is for handling the left over escaped characters during the first -// scanning (scanForStringLiteral). Admittedly this goes over the text block -// content again char by char, but this is required in order to correctly -// treat all the white space and line endings -private boolean getLineContent(StringBuilder result, char[] line, int start, int end, boolean merge, boolean lastLine) { - int lastPointer = 0; - for(int i = start; i < end;) { - char c = line[i]; - if (c != '\\') { - i++; - continue; - } - if (i < end) { - if (lastPointer + 1 <= i) { - result.append(CharOperation.subarray(line, lastPointer == 0 ? start : lastPointer, i)); - } - char next = line[++i]; - switch (next) { - case '\\' : - result.append('\\'); - if (i == end) - merge = false; - break; - case 's' : - result.append(' '); - break; - case '"': - result.append('"'); - break; - case 'b' : - result.append('\b'); - break; - case 'n' : - result.append('\n'); - break; - case 'r' : - result.append('\r'); - break; - case 't' : - result.append('\t'); - break; - case 'f' : - result.append('\f'); - break; - default : - // Direct copy from scanEscapeCharacter - int pos = i + 1; - int number = ScannerHelper.getHexadecimalValue(next); - if (number >= 0 && number <= 7) { - boolean zeroToThreeNot = number > 3; - try { - if (ScannerHelper.isDigit(next = line[pos])) { - pos++; - int digit = ScannerHelper.getHexadecimalValue(next); - if (digit >= 0 && digit <= 7) { - number = (number * 8) + digit; - if (ScannerHelper.isDigit(next = line[pos])) { - pos++; - if (zeroToThreeNot) { - // has read \NotZeroToThree OctalDigit Digit --> ignore last character - } else { - digit = ScannerHelper.getHexadecimalValue(next); - if (digit >= 0 && digit <= 7){ // has read \ZeroToThree OctalDigit OctalDigit - number = (number * 8) + digit; - } else { - // has read \ZeroToThree OctalDigit NonOctalDigit --> ignore last character - } - } - } else { - // has read \OctalDigit NonDigit--> ignore last character - } - } else { - // has read \OctalDigit NonOctalDigit--> ignore last character - } - } else { - // has read \OctalDigit --> ignore last character - } - } catch (InvalidInputException e) { - // Unlikely as this has already been processed in scanForStringLiteral() - } - if (number < 255) { - next = (char) number; - } - result.append(next); - lastPointer = i = pos; - continue; - } else { - // Dealing with just '\' - result.append(c); - lastPointer = i; - continue; - } - } - lastPointer = ++i; - } - } - end = merge ? end : end >= line.length ? end : end + 1; - char[] chars = lastPointer == 0 ? - CharOperation.subarray(line, start, end) : - CharOperation.subarray(line, lastPointer, end); - // The below check is because CharOperation.subarray tend to return null when the - // boundaries produce a zero sized char[] - if (chars != null && chars.length > 0) - result.append(chars); - return (!merge && !lastLine); + return TextBlock.convertTextBlockToLines(all); } public final String getCurrentStringLiteral() { //return the token REAL source (aka unicodes are precomputed). @@ -2029,16 +1844,52 @@ protected int processSingleQuotes(boolean checkIfUnicode) throws InvalidInputExc } throw invalidCharacter(); } + +public sealed interface IStringTemplateComponent permits TextFragment, EmbeddedExpression { + // marker +} + +public record TextFragment(int start, int end, char [] text) implements IStringTemplateComponent { + +} +public record EmbeddedExpression (int start, int end) implements IStringTemplateComponent { + +} +List templateComponents = null; +void addStringTemplateComponent(IStringTemplateComponent stc) { + if (this.templateComponents == null) { + this.templateComponents = new ArrayList<>(); + } + this.templateComponents.add(stc); +} +List getCurrentTemplateComponents() { + return this.templateComponents; +} +void clearStringTemplateComponents() { + this.templateComponents = null; +} + + protected int scanForStringLiteral() throws InvalidInputException { boolean isTextBlock = false; // consume next character this.unicodeAsBackSlash = false; + if (this.jumpingOverEmbeddedExpression == 0) { + clearStringTemplateComponents(); + } boolean isUnicode = false; + // take backup and restore later, to ensure that the getCurrentTokenStartPosition() returns the correct value later. + // The startPosition is likely modified when scanning for embedded expressions. + int startBkup = this.startPosition; isTextBlock = scanForTextBlockBeginning(); if (isTextBlock) { - return scanForTextBlock(); + int token = scanForTextBlock(); + this.startPosition = startBkup; + return token; } else { + int textFragmentStart = this.currentPosition - 1; + int lastCharPos = this.currentPosition; try { // consume next character this.unicodeAsBackSlash = false; @@ -2086,9 +1937,8 @@ protected int scanForStringLiteral() throws InvalidInputException { } throw invalidCharInString(); } - if (this.currentCharacter == '\\') { + inner: if (this.currentCharacter == '\\') { if (this.unicodeAsBackSlash) { - this.withoutUnicodePtr--; // consume next character this.unicodeAsBackSlash = false; if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\') && (this.source[this.currentPosition] == 'u')) { @@ -2102,15 +1952,20 @@ protected int scanForStringLiteral() throws InvalidInputException { if (this.withoutUnicodePtr == 0) { unicodeInitializeBuffer(this.currentPosition - this.startPosition); } - this.withoutUnicodePtr --; this.currentCharacter = this.source[this.currentPosition++]; } - // we need to compute the escape character in a separate buffer + + if (this.currentCharacter == '{') { + textFragmentStart = getAndStoreStringFragment(textFragmentStart, lastCharPos); + break inner; + } + this.withoutUnicodePtr--; scanEscapeCharacter(); if (this.withoutUnicodePtr != 0) { unicodeStore(); } } + lastCharPos = this.currentPosition; // consume next character this.unicodeAsBackSlash = false; if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\') @@ -2145,6 +2000,15 @@ protected int scanForStringLiteral() throws InvalidInputException { } throw e; // rethrow } + if (this.templateComponents != null) { + // mark the ending of the last fragment in the string template (before the closing quote) + if (this.jumpingOverEmbeddedExpression == 0) { + int textFragmentEnd = this.currentPosition - 2; + addStringTemplateComponent(new TextFragment(textFragmentStart, this.currentPosition - 1 , getCurrentTokenInRange(textFragmentStart - this.startPosition, textFragmentEnd - this.startPosition))); + } + this.startPosition = startBkup; + return TokenNameStringTemplate; + } return TokenNameStringLiteral; } } @@ -2152,13 +2016,24 @@ protected int scanForStringLiteral() throws InvalidInputException { protected int scanForTextBlock() throws InvalidInputException { int lastQuotePos = 0; try { - this.rawStart = this.currentPosition - this.startPosition; + this.textBlockOffset = this.currentPosition - this.startPosition; + int textFragmentStart = this.startPosition; + int lastCharPos = this.currentPosition; while (this.currentPosition <= this.eofPosition) { if (this.currentCharacter == '"') { lastQuotePos = this.currentPosition; // look for text block delimiter if (scanForTextBlockClose()) { - this.currentPosition += 2; + if (this.templateComponents != null) { + // mark the ending of the last fragment in the string template (before the closing quote) + if (this.jumpingOverEmbeddedExpression == 0) { + addStringTemplateComponent(new TextFragment(textFragmentStart, this.currentPosition + 1, + getCurrentTokenInRange(textFragmentStart - this.startPosition, this.currentPosition - this.startPosition - 2))); + } + this.currentPosition += 2; // move it past the triple quote + return TokenNameTextBlockTemplate; + } + this.currentPosition += 2; // move it past the triple quote return TerminalTokens.TokenNameTextBlock; } if (this.withoutUnicodePtr != 0) { @@ -2189,8 +2064,11 @@ protected int scanForTextBlock() throws InvalidInputException { this.currentCharacter = this.source[this.currentPosition++]; continue; case '\\' : - this.currentPosition++; - break; + if (!this.unicodeAsBackSlash) { + this.currentPosition++; + break; + } + //$FALL-THROUGH$ default : if (this.unicodeAsBackSlash) { this.withoutUnicodePtr--; @@ -2211,6 +2089,12 @@ protected int scanForTextBlock() throws InvalidInputException { this.withoutUnicodePtr --; this.currentCharacter = this.source[this.currentPosition++]; } + if (this.currentCharacter == '{') { + textFragmentStart = getAndStoreStringFragment(textFragmentStart, lastCharPos); + this.textBlockOffset = 1; + // We break, because, the matching } has already been unicodeStored + break; + } int oldPos = this.currentPosition - 1; scanEscapeCharacter(); if (ScannerHelper.isWhitespace(this.currentCharacter)) { @@ -2222,11 +2106,12 @@ protected int scanForTextBlock() throws InvalidInputException { this.currentCharacter = this.source[this.currentPosition]; break outer; } - } - if (this.withoutUnicodePtr != 0) { - unicodeStore(); + if (this.withoutUnicodePtr != 0) { + unicodeStore(); + } } } + lastCharPos = this.currentPosition; // consume next character this.unicodeAsBackSlash = false; if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\') @@ -2242,13 +2127,33 @@ protected int scanForTextBlock() throws InvalidInputException { } if (lastQuotePos > 0) this.currentPosition = lastQuotePos; - this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.rawStart; + this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.textBlockOffset; throw unterminatedTextBlock(); } catch (IndexOutOfBoundsException e) { - this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.rawStart; + this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.textBlockOffset; throw unterminatedTextBlock(); } } + +private int getAndStoreStringFragment(int lastFragmentStart, int textFragmentEnd) throws InvalidInputException { + if (this.jumpingOverEmbeddedExpression == 0) { + addStringTemplateComponent(new TextFragment(lastFragmentStart, textFragmentEnd - 1, getCurrentTokenInRange(lastFragmentStart - this.startPosition, textFragmentEnd - this.startPosition))); + int eeStart = this.currentPosition; + jumpOverEmbeddedExpression(); + // verify that we are at } or handle error + int eeEnd; + if (this.currentCharacter == '}' && this.source[this.currentPosition - 1] == '}') { + eeEnd = this.currentPosition - 1; + } else { + eeEnd = this.currentPosition - 6; + } + addStringTemplateComponent(new EmbeddedExpression(eeStart, eeEnd)); + lastFragmentStart = this.currentPosition; + } else { + jumpOverEmbeddedExpression(); + } + return lastFragmentStart; +} public void getNextUnicodeChar() throws InvalidInputException { //VOID @@ -2320,6 +2225,20 @@ protected boolean isFirstTag() { return true; } public final void jumpOverMethodBody() { + jumpOverBody(); +} + +private int jumpingOverEmbeddedExpression = 0; + +public final void jumpOverEmbeddedExpression() { + this.jumpingOverEmbeddedExpression++; + jumpOverBody(); + this.jumpingOverEmbeddedExpression--; +} + +// jump over the body of methods, embedded expressions, blocks etc, taking care to handle +// comments, strings, text blocks etc which may have braces in them +public final void jumpOverBody() { this.wasAcr = false; int found = 1; @@ -2394,108 +2313,10 @@ public final void jumpOverMethodBody() { break NextToken; } case '"' : - boolean isTextBlock = false; - int firstClosingBrace = 0; try { - try { // consume next character - isTextBlock = scanForTextBlockBeginning(); - if (!isTextBlock) { - this.unicodeAsBackSlash = false; - if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\') - && (this.source[this.currentPosition] == 'u')) { - getNextUnicodeChar(); - } else { - if (this.withoutUnicodePtr != 0) { - unicodeStore(); - } - } - } - } catch (InvalidInputException ex) { - // ignore - } - - Inner: while (this.currentPosition <= this.eofPosition) { - if (isTextBlock) { - switch (this.currentCharacter) { - case '"': - // look for text block delimiter - if (scanForTextBlockClose()) { - this.currentPosition += 2; - this.currentCharacter = this.source[this.currentPosition]; - isTextBlock = false; - break Inner; - } - break; - case '}': - if (firstClosingBrace == 0) - firstClosingBrace = this.currentPosition; - break; - case '\r' : - if (this.source[this.currentPosition] == '\n') - this.currentPosition++; - //$FALL-THROUGH$ - case '\n' : - pushLineSeparator(); - //$FALL-THROUGH$ - default: - if (this.currentCharacter == '\\' && this.source[this.currentPosition] == '"') { - this.currentPosition++; - } - this.currentCharacter = this.source[this.currentPosition++]; - continue Inner; - } - } else if (this.currentCharacter == '"') { - break Inner; - } - if (this.currentCharacter == '\r'){ - if (this.source[this.currentPosition] == '\n') this.currentPosition++; - break NextToken; // the string cannot go further that the line - } - if (this.currentCharacter == '\n'){ - break; // the string cannot go further that the line - } - if (this.currentCharacter == '\\') { - try { - if (this.unicodeAsBackSlash) { - // consume next character - this.unicodeAsBackSlash = false; - if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\') && (this.source[this.currentPosition] == 'u')) { - getNextUnicodeChar(); - } else { - if (this.withoutUnicodePtr != 0) { - unicodeStore(); - } - } - } else { - this.currentCharacter = this.source[this.currentPosition++]; - } - scanEscapeCharacter(); - } catch (InvalidInputException ex) { - // ignore - } - } - try { // consume next character - this.unicodeAsBackSlash = false; - if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\') - && (this.source[this.currentPosition] == 'u')) { - getNextUnicodeChar(); - } else { - if (this.withoutUnicodePtr != 0) { - unicodeStore(); - } - } - } catch (InvalidInputException ex) { - // ignore - } - } - } catch (IndexOutOfBoundsException e) { - if(isTextBlock) { - // Pull it back to the first closing brace after the beginning - // of the unclosed text block and let recovery take over. - if (firstClosingBrace > 0) { - this.currentPosition = firstClosingBrace - 1; - } - } + scanForStringLiteral(); + } catch (InvalidInputException ex) { + // ignore } break NextToken; case '/' : @@ -3093,6 +2914,12 @@ protected final void scanEscapeCharacter() throws InvalidInputException { case '\'' : this.currentCharacter = '\''; break; + case '{' : + if (JavaFeature.STRING_TEMPLATES.isSupported(this.sourceLevel, this.previewEnabled)) { + this.currentCharacter = '{'; + break; + } + throw invalidEscape(); case 's' : if (this.sourceLevel < ClassFileConstants.JDK15) { throw invalidEscape(); @@ -5702,7 +5529,4 @@ public static InvalidInputException invalidToken(int token) { public static InvalidInputException invalidInput() { return new InvalidInputException(); } - - - } 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 c716f1d6e7c..964b16ef965 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 @@ -71,8 +71,8 @@ static int getRestrictedKeyword(String text) { } // BEGIN_AUTOGENERATED_REGION - int TokenNameIdentifier = 19, - TokenNameabstract = 42, + int TokenNameIdentifier = 22, + TokenNameabstract = 44, TokenNameassert = 81, TokenNameboolean = 105, TokenNamebreak = 82, @@ -82,76 +82,78 @@ static int getRestrictedKeyword(String text) { TokenNamechar = 108, TokenNameclass = 70, TokenNamecontinue = 83, - TokenNameconst = 136, + TokenNameconst = 138, TokenNamedefault = 76, TokenNamedo = 84, TokenNamedouble = 109, - TokenNameelse = 121, + TokenNameelse = 123, TokenNameenum = 74, TokenNameextends = 92, - TokenNamefalse = 52, - TokenNamefinal = 43, + TokenNamefalse = 54, + TokenNamefinal = 45, TokenNamefinally = 116, TokenNamefloat = 110, TokenNamefor = 85, - TokenNamegoto = 137, + TokenNamegoto = 139, TokenNameif = 86, - TokenNameimplements = 133, + TokenNameimplements = 135, TokenNameimport = 111, - TokenNameinstanceof = 17, + TokenNameinstanceof = 16, TokenNameint = 112, TokenNameinterface = 73, TokenNamelong = 113, - TokenNamenative = 44, + TokenNamenative = 46, TokenNamenew = 38, - TokenNamenon_sealed = 45, - TokenNamenull = 53, + TokenNamenon_sealed = 47, + TokenNamenull = 55, TokenNamepackage = 90, - TokenNameprivate = 46, - TokenNameprotected = 47, - TokenNamepublic = 48, + TokenNameprivate = 48, + TokenNameprotected = 49, + TokenNamepublic = 50, TokenNamereturn = 87, TokenNameshort = 114, TokenNamestatic = 37, - TokenNamestrictfp = 49, + TokenNamestrictfp = 51, TokenNamesuper = 34, - TokenNameswitch = 63, + TokenNameswitch = 64, TokenNamesynchronized = 39, TokenNamethis = 35, TokenNamethrow = 78, TokenNamethrows = 117, - TokenNametransient = 50, - TokenNametrue = 54, + TokenNametransient = 52, + TokenNametrue = 56, TokenNametry = 88, TokenNamevoid = 115, - TokenNamevolatile = 51, + TokenNamevolatile = 53, TokenNamewhile = 79, TokenNamemodule = 118, TokenNameopen = 119, - TokenNamerequires = 122, - TokenNametransitive = 128, - TokenNameexports = 123, - TokenNameopens = 124, - TokenNameto = 134, - TokenNameuses = 125, - TokenNameprovides = 126, - TokenNamewith = 135, - TokenNameIntegerLiteral = 55, - TokenNameLongLiteral = 56, - TokenNameFloatingPointLiteral = 57, - TokenNameDoubleLiteral = 58, - TokenNameCharacterLiteral = 59, - TokenNameStringLiteral = 60, - TokenNameTextBlock = 61, + TokenNamerequires = 124, + TokenNametransitive = 130, + TokenNameexports = 125, + TokenNameopens = 126, + TokenNameto = 136, + TokenNameuses = 127, + TokenNameprovides = 128, + TokenNamewith = 137, + TokenNameIntegerLiteral = 57, + TokenNameLongLiteral = 58, + TokenNameFloatingPointLiteral = 59, + TokenNameDoubleLiteral = 60, + TokenNameCharacterLiteral = 61, + TokenNameStringLiteral = 41, + TokenNameTextBlock = 42, + TokenNameStringTemplate = 120, + TokenNameTextBlockTemplate = 121, TokenNamePLUS_PLUS = 2, TokenNameMINUS_MINUS = 3, - TokenNameEQUAL_EQUAL = 20, + TokenNameEQUAL_EQUAL = 19, TokenNameLESS_EQUAL = 12, TokenNameGREATER_EQUAL = 13, - TokenNameNOT_EQUAL = 21, + TokenNameNOT_EQUAL = 20, TokenNameLEFT_SHIFT = 18, TokenNameRIGHT_SHIFT = 14, - TokenNameUNSIGNED_RIGHT_SHIFT = 16, + TokenNameUNSIGNED_RIGHT_SHIFT = 17, TokenNamePLUS_EQUAL = 93, TokenNameMINUS_EQUAL = 94, TokenNameMULTIPLY_EQUAL = 95, @@ -169,44 +171,44 @@ static int getRestrictedKeyword(String text) { TokenNameMINUS = 5, TokenNameNOT = 66, TokenNameREMAINDER = 9, - TokenNameXOR = 25, - TokenNameAND = 22, + TokenNameXOR = 24, + TokenNameAND = 21, TokenNameMULTIPLY = 8, - TokenNameOR = 28, + TokenNameOR = 27, TokenNameTWIDDLE = 67, TokenNameDIVIDE = 10, TokenNameGREATER = 15, TokenNameLESS = 11, TokenNameLPAREN = 23, - TokenNameRPAREN = 26, + TokenNameRPAREN = 25, TokenNameLBRACE = 40, TokenNameRBRACE = 33, TokenNameLBRACKET = 6, - TokenNameRBRACKET = 69, - TokenNameSEMICOLON = 24, + TokenNameRBRACKET = 68, + TokenNameSEMICOLON = 26, TokenNameQUESTION = 29, TokenNameCOLON = 65, TokenNameCOMMA = 32, TokenNameDOT = 1, TokenNameEQUAL = 77, TokenNameAT = 36, - TokenNameELLIPSIS = 120, + TokenNameELLIPSIS = 122, TokenNameARROW = 104, TokenNameCOLON_COLON = 7, TokenNameBeginLambda = 62, - TokenNameBeginIntersectionCast = 68, + TokenNameBeginIntersectionCast = 69, TokenNameBeginTypeArguments = 89, TokenNameElidedSemicolonAndRightBrace = 71, - TokenNameAT308 = 27, - TokenNameAT308DOTDOTDOT = 129, + TokenNameAT308 = 28, + TokenNameAT308DOTDOTDOT = 131, TokenNameBeginCaseExpr = 72, TokenNameRestrictedIdentifierYield = 80, TokenNameRestrictedIdentifierrecord = 75, - TokenNameRestrictedIdentifiersealed = 41, - TokenNameRestrictedIdentifierpermits = 127, - TokenNameBeginCaseElement = 130, - TokenNameRestrictedIdentifierWhen = 131, - TokenNameBeginRecordPattern = 132, - TokenNameEOF = 64, - TokenNameERROR = 138; + TokenNameRestrictedIdentifiersealed = 43, + TokenNameRestrictedIdentifierpermits = 129, + TokenNameBeginCaseElement = 132, + TokenNameRestrictedIdentifierWhen = 133, + TokenNameBeginRecordPattern = 134, + TokenNameEOF = 63, + TokenNameERROR = 140; } diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java index c33b1a4ed66..a724d4e2b7b 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2019 IBM Corporation and others. + * Copyright (c) 2000, 2023 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -2129,7 +2129,9 @@ private void reportPrimaryError(int msgCode, int nameIndex, int token, int scope int currentKind = this.lexStream.kind(token); String errorTokenName = Parser.name[Parser.terminal_index[this.lexStream.kind(token)]]; char[] errorTokenSource = this.lexStream.name(token); - if (currentKind == TerminalTokens.TokenNameStringLiteral) { + if (currentKind == TerminalTokens.TokenNameStringLiteral || + currentKind == TerminalTokens.TokenNameStringTemplate || + currentKind == TerminalTokens.TokenNameTextBlockTemplate) { errorTokenSource = displayEscapeCharacters(errorTokenSource, 1, errorTokenSource.length - 1); } 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 4de015e0f03d013f63eb3c5b40a420abf7f61951..376f60f500e77fe25a805dfdca94c6be8dfb6283 100644 GIT binary patch literal 38034 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 literal 37426 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 diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser12.rsc b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/parser12.rsc index a1a252e71194a4c2dbf397caf923ff20bc6ace08..0d20caf3eed5ac603d8c8780ba70ce913e740844 100644 GIT binary patch literal 646 zcmY+C%S)6|9EP7a!bsYbpSMn}npLfeKruqXY7<0Ej$}!sEy|PRFJ#={5a^1Hq7`N+ul$u)Ac)QKnGxyt1_S^YdP>zj;; z#!ar4t30bJ6U;5fsj$kdj-;rn>&B?eF&T$Bq!A4>!;H$#=uEV*M4O5EK_#Zu%RB{2 zd}fZVY@u0!MRS{@{AG$#qxv(Rx_;mXqg?TPn>Fm?#(z4JO6B!c3+~-cyI!iG0z1t# zH<|S8!#bfp^`;5dc+Q6It49x1)IqBJ_8f6iXE>tBU1I+^?NM;WI7dkOvQgu)&bJ)x{tWdBi!k(`R-h7Wl+R z%6#Cxd0XcVk=N!`#2qTSXqwc-H?yooRy5>(>zw5P`)Oss&hKS+a-hSSPDb_YV$HgH z$a9J_Nq3QZoaVSyj>NZfey5#YvfAj~yq&1|5a{2J~CQxbPNhjyfs#(=0L=1x@%vM1(HHKwULyJBsAvMr2-55zh$>amH_dx?p1fvNR+(lq z!Z7!}dqq9!R#)6$i&yMuN}YPF2_0dLU*02Z>I!E}GC`O>u2cng411(ee~3QknYRr3 z2QvqXs;8e1`f3-hu%bPz@`#_@R-Q}hQ!l@Dg1fwChs!#u4leS9r}WXlNwYVyz&xM% zM3s-`eT{bn-kQ09CoF2fi4{D&U2VU?Bjx+KR_Wmu-}?a1@&xMbtmUI z&Dp4Wk}1y6V~v$?IajyZ=VfaR&Q05gT^9JZz!zr4dGg^k!xDrO*BT=eq7^8-6(d^FQZ0*Xy~ibKhqEfwkFb zGwU@g#{G<~_nlaM$gt4gPwjpJ&j9v>9|t#J&DmLS)YgJxwan*yx$KNBrN6k>))Vyu z^NgTpkr8{?M!ltE=o#y>DfE#41BwmW(QMJ?ci~y-e}k?57r4g%1Xuf2u+#ql8+;dd zlhAj=miX`B&4E3EmB1$d4gb=>#=uqnE1tH%4!;EN4(t+YtYQtmbGBPE7hU+Yg6(!n z+_o1@U=J;Kqlb%5+JAw)ii{$IMXS&hHCU_+zBKq9!Rd+r_TZYu6zTiW!^H~l3#3xq z3aZy|(H!=&;7h<68+TeHHpH2cPtLf_cA{UhlR2W12+31quWVJ`%#Y!TXm7xJ7I}s~ zSMix2Ebdh9{GfFwHg9J?t#)6|B^v7j@&BQj+5fd;Lcfl!44=Vz*{+b^!>~Pm6n}7= zP8KJ3nDG>K%|16Ts;RxyR<)0Ffcm zd!V(t=-rq0u#nf=&NF-LFwc`M<|^6zC}}NPZRt}~xkCBFwwYoW{ygt*C}o?N2{Ai? zZ1S(McUhxy8d^Eptg{P?)0Xy=_PEa0zd|y%&9dw{dpEI&zZMw?4EqXaY20X`WIFe% z+E`dg>&A04Y%*{!bNn1@ohGCE@%1_t#*cVYexGI=d>x+jT2*DkrlMvRv3j}b{aVpq z^u>$4OQv zTYKTVQ!4pn+XT+@r+mU-xw!Ay`qFckB{B&eMUkbDDu$vM6k-dV}pBI|ip3eC* U_&3Nj@+DHWPr!Z17KB&*KiTtdLjV8( literal 2504 zcmZXW+iz7>5XNUV&{8Y0iqKkVLr*5zqSp&6RQ^)68fps?kDl|V~_h=;1JfFodZX#8x)()e9oI?XKX3`#a7!u z)KAPai2fGYXgh7hTS|tmS%*+T3@Uk{4cP< zC%|Pw-ve9We}c;cy8r+*1&eZ1YaN6A@tp>yB*(o+pC$2JMd`* zJM4_O?I>1&U9@aL4;5{+{|1{vMv#HxHlZ~Izcu*E;QIan^(5w&;F`r0=})1DikrbN zkV?@Es@G5b1iuQrPxvZkd54HPOSXNQXH(m@ zx>fcmd!V(t=-r#XVKJ|_%`$s@VV);j%vG|5QPNs^7mci_a)t7TZM8y~dzSmxm$FUF zxR||-Y;v8sUDl|ahE|R?YwyBhx264E+pWFzuaL}bvn+eYP9_%d^O1qTu&;2&j1w)C z%;a8G+a6ZZI`Nzgn+)8?9KXg|KOv(B@b&mQe8;^Z-%qo^*o6+9vYb z>9g39H&UEfqYV!C4oQ?MA`2?|J`jWb(uSlM; z_=05XTdvWw6Fn{T)yRvC_B}JS=@mt2 z!Thcc#~ZMb)0@~duVv=`UXGd0ZF((qCX6>m^_ra8b5R$5!FmYmNA!b86GB9>DrV#L zrA-wQm2Rd4W@m8+~?-HR$&r9SrLlCc*oja|uAPParA zPAf?Ma_lmyoI~TP3Y2jRUsAHjjq=2MsXvn~vA4sKo3yKV*}=s;wI;v%C`-DF<9-vd zqsW}|T1#Nf!4r+v|6+ALX_1dmIGKiUjGAN9M1%iYT6HytG zK?o|#BrF&<8qtK#h%PH36Xtjg|De$^17m_rg``HoKW0e8Y%##RUupv=G5&G6yWjVI z&wZcg`8+=W$|iVgE9xx_0Mdf=Cjjb>0uVc38E9c!4gipRBY7S^#YPetxC%gd8URC= zCk}w}E-?*&L?;=zZPVW`w06-=L>#P3It<-HGFRH)Rk^rEm0jL_~lv+tQ z{wBT)0Kr)Rcv%4Whq(KF?ot9^YggU#SVFPTvQXO90pE>oPH`bz1l}O;vGk$Ri4B)q z_}}oaA+HH)1YA^2K=cVZqRHX{&Aet&`cR1Agwk2LuJW8#gTI9h;|HZLNX63K(mvEA zZkF9r2F0Tiyke<#wqjhZQSZ_?0T68$?Lha7dodInz<-tXbJ^`@Ngn60uG65vW@MDC zi%1h$`8N4S0H{{egPzUS9(tah4JmAoJU1;?ChQ>Hi_Bhc2JTg@E~-ThD&7p-0{~oC z)WR={8a)VA&t`8Xq+r6#Uha?8e4F9~tekE;c}KrTe~GIqC_lo_RgFp_lJkN-Azw(M zr^PFf0PaHy=u4OzOB1{BapJPnsbtG0q$hc6g=a)M7OR(5-bDh2sCOcGjyaZ`l>L$-Qma$1rp_XT)FeBc`oTJD z?{vIPOtXv;gWL$uC>q#0)&VJD_d`xpI}#boKw?XxrzsyBiE#uKopYW^7#k^+c5+oZ zRn-2@iPK>=qBeY7G%ax>#<9`0L9{&C!Cu8yum!Gr%N_gZS!_m8 zD;%}8%k@QuuwFZZJq|7N4u#Upgp5jd$hz38EXiI_-ZeyHxSF^$*Ah6-#f$T9@m1*i;tvoKp%@CeuKd)v%92CANCH8(H%)69}$rvq1{P9yegw*w21SZoH)p0N=6P)3C=hwb5x@b2)(;i>Qg zf5yMhpLdvo=4RU2>b&MDbLL!E-8xxTK5HqrnPgoNZ6p?XIWiFJ2=0k|9=RPY_n|(Q zZ@sV2f5X2RXmq!_dmPtjmo010TkhDd+vlBHdaL`m`&-{ou;)H3giE8Rr{MPh9{f_!xbH8S(W~36W+*&!MwKPwfQSCvh z)!eGRU)5%qsv6VDb=#>v>Py|JYGw87)i-OrHQAa!YcsXyNgdhCoeeeSe)FV~)$gHD z{UzfO0HB+?&XOO4;=ddjqW{-Z$q}=p=;`@>0#~3TBlfJPzyh3a-1lUzr6)@h{q)&@ J6pB*=z+Y&9?&<&l literal 1684 zcma)+eM}Q)9LJx8((Cp5dhPXvzERrJ0=>5Mh0@;9UaxP2#0Y9!lqExx&1_CHC7DEC zTudBuIwovr5H!(6BO{t%oH1D35Cz#HGeNdw>f+oCu%R<^)2T#v&$`CBnPvZ6?w;T8 zdG7mrexL6TfV@H8GF4PL3xLEZDFZ+;13+va>q^8E?*ou*N@n02Ya)-pRRHqs09ab- zbpUu90vQ0XH$^6~LHrW{_!Dv`7jHzn06+!=b&|`3-AtRSB_{kL0IG5B4^9C1W8z}T ztmH12`8@!}*npAcgwi#|3ZmGF!4PT?sjA<@u-+02EFSS$ zIU%pXX?%-fsp1^~h*}>JaFP?gO}@uex4R}VPgXOXoI9nN5E*n862j%nNDU3fTBJ2Hf0^WIsJmU-u$pA#MOR3zk|P9;*^k*enB%Y zgyO1ktPpWaZOAkh6UAk1_$uiEe6`G=YR?;#_3)OV{X#}Kg0a}BC?Ps8PUX(_|RtMw;?Z-b&eUmmqO41R?iK~P>!n%|P&!>D*54 zmUjJB)t@!NIIKp#B6c}07BZj-1k^~ z)-MpO=ZG1~GKBWIJFr({>cGeGNbq+#!D{6-Y)h&Zf8uSh)F%fltztH?lDO_3@XVF- zahf+s?xfcRG8K#QEy)$I(^d!U6IAKjgrA|h`MU+pfq4`!A4lBCbk)kZoayut{?Ygn z4T*=syJ87; zTXYA_CpN0Di0=nTWK6Upy^sHHdaJKVd5{?TI~B<_!gfeS{CK7I-$bNNxk^~mQzo(; zz!{MyvovHU$g>@Wd`WGPf>%XS+@HKw>%9ao)2ol%A6lRrOUTt8PT- zNNePy$V8YQc7>Ohe@Pqt7lI>|uUB@Lc2)FNTu=;qt*$2b19?s4=O_`SqO0g3`ew8} zdNev!d8TqEBnySYZQ;Y=$)GqG_MY@F^2E!Rxn?{q<@>$!{=LC9!4E^LLpwqzLf69g zC?l1s5>@%44;T}Zbel`1IL&_<-@dW;RWYwPuDV*h zwRpr1>`{B0J>yWTX?34txue^0xkRC?D_K&~S#n90E?uh8Yg$U@HCMH?wokiIR#xz0 zL8k0Ao!)t2YBpUdqzZcrA91r`Z`rKV zu4*?wbiPs)vK|Kjs*!KY>9KhJOOd7i|7yx9qElH-&(}k(hl;F@XEjkhaArwuPkk-x R$vHYpM|L(K(^=O5@CUob_k#cc 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 1e242823f0ae4720736fd3df9c13dfc57645c4e6..540fa4c6736e57c261d426273280053946b02e95 100644 GIT binary patch literal 2516 zcmeHIYj0IW6kTg5eORb%fqQ#e9;Yv8!czr57)2{;Eb>s0Qra3?_~IjhFM?XY+Snq- zQX+EGHbSUCB9^KUY=RIB6d~Zfx3L!iEmbtAiIp@OHTq50%xN+F2kvC_!Aru@8IjDB5*ufje^)-S`B@@F`B7T@6tzL9o6zCs0-a5Pq8IhNsR#d8Rq*ozLG>{1K` zvQmg&aS=~33FTPIWUOE+Q;@(kd5z&q#Tt>%HilS^5*}ihV>yQ7P|RFrb0YKTA;w0; z*~CtHjU&uDZsI|$Vtk*=xr__3o@HF&^6YXk?6&xDCTDOqXYnr1;XS;Y^Eg-8-78z= zc!B@$0RLpRaEfySHghAk@MYBV6}-lm@GAe-ewg|EmqjcR8pL%Wl#E}vPy7%mZuT*g zS(4hfFjiqm&tz$~F;m(1Xq}99UK3LhYscA26Q`+;$!y1CCdOh6?iA`1FdpNOhn#?M z{_Jcg&?}VMB&UYY=k$I?@2wzzlHCffGSh`e)D)tTm+*#={0!A7F&X+#*K@pLvwI8i z1j_K3c8b}LAG8}4o*iN#gx};NtZDNo5N|pmX{nxel%kY-&15lGB#rBK^1RTgklzF| z6hj3TF+=hYHs~4BDvnCGQz==oESKCwz*cX7!bs+}uCrbCIYMEwFbHbiViBNntLFa} ztX@J{)X0k>ame>rzidayB$?6d#x~&?F)4UcXmu;ve8uuS*NfqGJgi!cI{uQ)3~?4> zW$-U%tAy}J{E&ZOSFo#U8N>~CNxx6k5S6?ct*nx6v)-cOV+hyHO!~qoUEOBKQH{8I zFBr$wfydN)C!~K4XRUqpO9a03C!vSc%GcMhNcw2vDKWkSxn{1Seb+p|7Bujbxldki zm@KxK5aK3ma@0Fp6#Hqmu%82}@2h62dhk6l8BwPtDq2ex34wlnFM#QV4##UaI zMoj2zv+ulLmeNqh)m%M%B4YB)MD}p4WtMC8RD4daK|3K=p>}7rB&s2vcUh0*9N=K{ z9=Um3?hb_jk6Se@V$$GAHFCuJ8%rt11d*R8yorSVxSA!a!;`20eCEx1K`rPA? zEW4@c>%E@!id46wp5#jSMjfc(nRGKo%vtGR5SgMnVvHHZb;g$s%WW`snFsCKRcEDE zQM+&Es5X0)yREUH=6aRyPSnZI4sO<3IkSN$#buiAlqt@dwW+vyfnV7BLUmzr9j+sF zz9K}PSh%P?mnR>wQgL9<4RSw*g!q1UcLmtixk|TwJ*Ei*PiKcQ;v)QRzZI(3a(y{+ z)l(tXj7W7ad3?)R|52;$vhAyLY!H;cwEFQ^5x<7?=}L% G2>b^?t&Z6M literal 2476 zcmeHI{ZG|Z9Dbf7UIhZli`>f<@baR9T4`-<)~b=sqC`zak*?@Z)ka%esi6^0qy+pS z@eWu*TB}e>H)%6pW=bmUa#>u(0?TUD4_zDUZS`AQ^_+9X=D*OoXXks~KIilDJfF|G z0Kng{3k}$T5)>g7K0J$JEI~3RBMT`=LM~<@4^#0lGLVi*Fgi)XLuki?cn@uO8wK!U zCSFG?!q|&$?8h7&!~r~l4&7Sf?i|C1=*4k-gp)Xd^Ei!uTtJU(p2Yy7y4QzK5N5r6 z7?KwqSc#|bHLlCe_F5T>r2L;kn zi0in7CrPZu3Qj@=Co>5#%$3yvd?v5Mve`~ASEHDRn8_3-GXt~f<1}W|&nygZC!%a% zx2#6t<4dgNyP6H~9j@dGK8okLl&f5vJu3k;D+w+*!NEA)M2m2OYd7rovW_)0Hevr#dF5J05RG8g9chp`L{q$V3jZ6O8kF zr$2^4q13K(ss;J9)_q#Hf&5N-E4bFo6&?{Y3k|%CSB2zhgivf!^i9>6As_AD<9GsP zSgM_Tj^JDEMucaVSn%Q}+3=}T-vaTb8#*o3Xj>^t*=Yh|u1FGNw)3LUsgT_mQ{_Vi zmN8Z5UTo3m)hvoCw^OCF+0tBm69JpO2^1zGw|PC?MV~Dc@`OPm=PecqRBo00SA&&{ zDT)oUB2Sb{X*g%?vJGAXL-yh|;TSfPuv=*L%G*5o@(iC7!!2jm5j9?usoL2t-#=yxM|f5FJ!%S6gKvt-uqrJkYb(?X<#&PNv7E-)DqiI^8aXV9 z0in}q*IX=39+WY}(2W~m<1>Dqw*h`jN+9z?ki zoT5Fi_;P!$Dm~Iu$y_!IYhv8YXS1p)hEg-bWU0FP6iu5@3W>Fy{6M$UEeB#D$PMN` zy^leJOuF8wEc$dWC`P(@m7~}UpD8kh@C&0(1Z30pLg})zxLQE|1=RdHZ*+Hqe8VAG zc2hE_bsg&*u3?Sj8U)P)wgwR}Q_NH`XHVk^&*arn{>8spV{)X!avR4!bHCztEZeos zP+8WQS)klJr`U7lcOvHo74Kfu%FZ5c(_AsLo~Oj6M{mkZr_t(^-|Xk7_PtPElsgX+ z7M58Lks}r^NiNP(`<1-x33-h?h;bo)(7jy=Y-?SnTe|^zgh4=eZ(zhS{7n5^ zpTn=3@^Zt(sotdkcRSr!Z7zDfT)d*J9%r@PHMtzpJ5@!? zLR=VFmdo{a3=19YaU&xpPqXECO#c#+)SY=&vt+8}iN&B=QeDEKpBu$v8L!AzK!4-^ J|Ni3$`~#!Qi2(or 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 f25f52cb30eb2cd25da197c54a5cbb7ccb0521e5..6de5569a8d09ed641518465cd03a43264c748833 100644 GIT binary patch delta 18 YcmdnUzJq;3AtNgz5HN4fXLMo$04{t44FCWD delta 12 TcmdnNzL9-HA>-x>Mh7MU9-{;Z 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 d3a92025ff684e0ab484ab77d7552c05ade1e060..1d68d7e0a99cc371a90ad83222428088a3e80eb3 100644 GIT binary patch literal 17508 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 IX&pr5U#k=Sc>n+a literal 16424 zcmdU$iFX@G5ynd#_JYBV5m>h6WXGFbVeb1rRtD^40WZr&7^NO6xn$G*Qd`-SC-_UQKk#EYg@-6wcd`G@3-;?jl z59Eh3)o-o`q}zHomUqg#WJgDCC@zsfgKMa|xWLSs#(L*#df1r3VVFT!)tJ`;W~}G7 z95PUGnwu=vP5J%^+s( z9O9UZuQkzTEZtO=UXpEPgVcG1?AFeGqB5S#byyv(v+~c?@{HIE<2?^~bYIqQ9@SSw zbCyLj3fg`oKbD`!PvvLwbNPk*Qhp`Bmfxrb>cffFhqFw5&>MEYAdWs(EH|#U$F=K-_8P(2te@FGjo%k7MfyXCF2c|O?Dh`QXY zb)ywsl3_@0%wu4$*q&`Qb?W zCwRNA(Q~5jPYKl&+YAecwrfOS0gokAt%})_xIY>Mw=m8#zxW3IYg01PZw=;KM=W{VQ{yN zwi_FjdF0xpX7(~RiaHDt`w$7tcCSSnm18YxGq0Vsn7yHz2fEYpJ=c0BW8Q>3x;NtT zT0-Z{d$A~I$6 zRvl~o5w)ZLdF|!4b)P_9;_B*^Q=SjCMe@e6ng2D2(w)|gOlHgVf@DO|T}G~l z)Gu_cTmzjQ{*1K8GapGf17P-{u4bZR>|}}4u6DoEJ-eM{eM!D7UkRG&(-vnPuQvxR z|850z@JB*lxnB2`qo%LywlKNY{7X0I{#~!RHppPHUE7XkZL2h|w6Ju~l=`xJAL{HU zXPq`!EE3V#&n^!(H&|uJVL5HQe?L08fmG@fi;M1Dj>SNfuMD0!VJs0nZan3h^+UbV zoqty(QdxLVM(XXcMlRz1x1+d4Sq==c930BVm>7r_p^yUuG54&3V9K@BQnw_ir^k zbnjc&%k0Z|9~tZnYuM}IedeENf4ZsXX_u7QaGRJYG3!X>Y?W9>)Jn*S_O$ej7C-!r z?jzNFs+uFKs49|W7V>Vv*tPT2Wl(q0b~gO7e!@j8KPS&CYOXtqgtJO2%dz?|#!sb4 zh#%|6`>gV@)+&jNaT6J!LH8}S=tNh2q~~DfO{=aY3zAt<3!)qD-O$%FdS~82w^@*9 zPj__&u99vn;<{Ne7O8?{jC&$&5tAi@6#M1!DE$5Op5D7x7$$U zc9;d*kiDn{_?|j3(eJwZgna%XUzu*!*;W10YDVwkRh7BhC#e18J+oIU$}c;=R|Yyh z+j;moVL$wF{f8>gDwdN+a<%!ZmF6c>R-1pd^}pWdue38-&3^d5&7YX7eP?K$r&S7z zPVx-dm}j0uK6!?BMo#KauIQa*L#sMUwH|pU&8Nfy*^GB)JFD{y`DUVjdB+Dul8zo97Afwab0PR!SVO|_d3swQI$H(eV&Dm~Q2eOU#YR4U6% zj@xW92-TctUf?e4PJI~^*7i0}I&QbORd0*!Wp&#u{0mQD9X7GN0d8zk?#xr%^iYR2 zZoLhcad1s_uPxC-y;SoX`#P)gXJ%em`JKd`a`CBFWd%-qH$2;!cxOTEwa=f7NmW7K z=dUvIrTP7N-$CdsIEzd>gED@XXC(M9DnGmawmf;Gul=a(v-59h4!M|ocW1<}%(}bO zXn)qv73~)*48C-Ec<#B;7`CRqW7lmXcxKKo?mUY;u6INVzquo>EsL|NJS+XYk4)WW zmF4WnY;u&%YbT?sRIzM_NVJnt(ep-DcC%Sor4dJ@c4--f^VN~OAeCx)Szf8nG|=0& z4_dl)41*3%fk46-N3zyi$2jO&SqCc1)oN@j|^7r(F z0Qsuri~jO=HAgQ$|1i{UIC)Y0yMd3$6BpohPG4;O%nbha)B67FmoR@{`^T&_>%X@B zLFN9lxQ02FyWwp&huSu<4%>3yzGl2CXn@Uj*^?Z8Q)JrqgGH^@^CZV}9$BN!s9b-K zUh8GargUYCaWaBfx!0@}4P3|%wHsY5&&WQf4~%0K)+yp!yKbvZ4#O=^z=jK+fFT>B zXt&An(>g1n1QxfwSY}badx^8fiZVOeJ(Ob0kB;nkE$YtKUdIh5$j*H@fj>NcEYExF z^phvAxIA8reFB=XF^t()#*8x0TH&_+7LiJ|-$WnscHPrmG|_0gXc&gXIPAYTHKf)O zjjWre3iIpce0M){dYN*fY}<5noz5JVA{yT=hZ|t}7 z{E8*#eP>7R|5}+A|2MLJ+Od}N@C?Mqw%^P1P#e{me@qs%S)-o6+=_n947j(u*o<@#3GB5O(8>T*%>DRxXX?MOD@Dzp6JSD^SH> ztD|BRcyxAWY1Z3+Y`+|V@Ap=SXXj3i17P-xY;ITg`eN;k*~cY#KQG3v?LAT%yD!I* z@7G+`qQw8=-B+56<9W85bV;s^IX7dMWIJ=@Bp96tnipVr4s&ke9v(iDzE2 z*nHpR^@SS4#r}?$JtyK>5l;o|iK3kj+1}H35oDXGRQfM3p8TT6_N@Ly4!x;v#&MxL i-I0*V(!b|3nS@_uA$zTUalh(?uJoGyJN@oH-v1xYt>k$C 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 3c1553e304aedf0e32641e3afbdc9ebf43bb9499..14171db93170f6a8d43c771150be6692af8cb988 100644 GIT binary patch literal 646 zcmZuu%TB{E5S$=LfbcBD!QettdgyONLOcouaYXb3cpT}89+CL&&a9J2NNAL`cRe%S zb>Q(ImRR=nvfVkjzSe0W$lANe6P}qqSR|d~GA*2^)VO~0~ z&COfAL4#j@y1DAzqaw4aM`%49@9VnuxFkk|I!(x^$*#!_xM_7BpLQyS&`l#h%_Y90 zi=uQ1@oM$1=fIvkGNR$l;;7FbBE=JOa)q4U6CCgb_L&WFh&}F}3CDWD*ifkslxyvx zqfd%2yyF8GIL8@I$UnvrcCkZ`+`IOV literal 644 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 delta 32 ocmZ26m2uJ(#treTn-{V!P~5yz-GOJay}HU|TN94l8^&6 literal 100 zcmZQzU=U_tV2}orAQm!~0`nmvAQG9+z#st>DPhoHPz2KAa9IWhUmzQ#8g3>4heQJb 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 5692b53ac77e4b40b9b09332de34957cb6fa6ab5..6504a292a75f23ad1c44b37366f62314f7b2af99 100644 GIT binary patch literal 878 lcmZQz7zH#50Y;jbO1h!=+<{Myberg*gAx~0qL)g30{{ub00sa6 delta 29 ecmaFI_KIyoIOF8?Og0k*e1Mb`gjoip_5%Q{Y70^T 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 a6dbaf3c66ebd2b169f96770a9806bca837180c7..36e66a389c88e867a2519a6421925ca61bcffce1 100644 GIT binary patch literal 2516 zcmcIleQ1?c7=O-lKHk7GSG!%WG8h_{h&4eRgbbm7MTJ?np{b-03VzL0Owny_1~(N0 zm-(^Gxj8K{^PiFAzOEXwsNK~pW9(8I(XN*ea+m4yqu=ws-nt9zuj1jn?>Xmv&hzp6 zJa04e3mrK!%8mEl)-S4*nrbR*vqY6x-&U*mYph<8C|r-b?yhr_CH@6+ zjjth_kJNF#t6x*cT*k(9h#C1@A4D%>X zY_u^m!6F78)qh}jty_k#YxORbav6ODR;%==4ZDnp_e|gge&3_>kZ#GC`l*iw=sQZ$ zApJx?(lxqjis@%$dKPh{slAt_+r%NuG@8)Ii}gG6w9UuqsSC-!e!`yN^u=x>f}Bz%;R{4=-d0?5KkIa z*+A@lAp9oBRWGm%1sIx5su{k!)pIT?T)8Okar3xI;&H#p6KB_|EO?8W&B$%DS_dm> zsT)op!?azqRV{(JV|4I;9ib`}^d@$stj%3&d`hs-5?kPe$m-Yj&RNEKCa0=*Z=Hgw=t^j-}*p^mnTeN_2kFXnZ) zi<@wBs`U$-bR-OzB41+#CuN7@dOdnA zu5X|Yub3_@^(=d#VQE~;9q(Q_U`LW9+owp8NMkQg7IT|2H!>fC3&HZ zx%q+#kMM{v&BG>6rMgw}Hv`y-gX_o509We*^j;rbc_97h#eQ_*Ai6L`SJ91)(v5ys zN_P(aLsQN|Lvo`R5a|-}Y8udC4dMl3fQK#10E8FAPxb1fBuG6dJgkQT8b-VrEe2FdswzdnEGmfT7U4xNP z5z{X>H&*X(9JfVE^}^a?f}PxZKn%Vl0(2UXm0sf}ZgM@)04sb3<0kj=Fz|n%sh@`a zQnxffRgdRtt`+p9Ti_vUrDk3a*t9#Ozf=M0Vn3enCfo)?wVC-o%fikE7nSP7Is!X~ zU?GCIrRFZUF4v{ob(t=Mmj!07hn#7ebdzdBE-^Xf+swtDakEiRg^WytFJ?a1>ZgDg zB9JVxUvG-!t6yvN*a`VKM}TfefUPbw^KehJ3r?y{waE>h!^j@uo${{`p+;BY=D6AT z8|Dz4;_8E_a6)WHyqG)hI$fuk>&FaDK{>d!aDxe}b9mUl=cd@{_5(V^yMvR$vM$Wo z1~bF>g400yFz=Rs74#ym!*xLGhU*dT^bO2>7V$2zz|v=QuWNDpAbazL7U|Qjfg1E} zeajxP-%u&dvV*FXMpWxxavXiP%igp1%v9<#&zfR0HD9o7%h zz}~_Ct5p@yN?HS1IYw5QGvMMfo_V7CbQ)S!57Wo~sxcOFR;wPl{}8Xf^+(zHAN7HL yi)+Z|0CVtyKV;lh>!YsvZvop2af9H_^}klQH{3~#JTYZ<`@i7vkUV&&Df$zRm43be literal 2476 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 literal 3982 zcmbW4`+pNv5XDagTOcBoMH3S$Nn0SL;tNnjq$xs6F#$n&SSpAjDi3+o%0m!QD*v|M zb2po&-OZMdKQwKUyEAjooO5O>si85As;<5IP`mVjcIbV*r+2kS?`Tou+O0WBPjy_+ zRME5s^gxpu(lPa`tZjNzZ|QAq*BjcZ5e@Q8q=Jg7sgx7haT}@N^_dRoQytVN zI-rj=uaBsDLc_YJ{o1L!x}#sUPq%ba*Yyi`ab9umUi-V`n_&b@|6MIw#q3(k##P65p4JE-65!u_shLLK8eK_ye|T6UAAMufU< z=u2JDNuAeMI-{?t!O>lZt0-nxaa!keN@vMh%D7F1*rV+VcF>z~y1$27cTwM7STRM_ zC#Xu`9I2(BbWK0%s(#S-x}xuNS(o%J_xgtH{cxl&;I@tqtq&+|3B4<5lU~zCSh5wq zm^s_%rTLe|K67L{Oq-_SW8AzP7;_x{uE!1osSsZ;xAZm|H)P4e~=VGLDFQ+=$5m1@Yk(_m0k1WF|; zs*+(=w{>5?gYOIoPZ2fNUse~)8f$Sb)ZbgTM$Ve45O0`z3$P;MeU0e#PNuW);hatr zvk`Jj8rM+mPhY#6dMu-+aZ9hpr zo9|=RrP(@(maNZS8n%-x>DG#kwVT#$6;!NBYc#L(4eG9ggHJ2u_To`UY_LO5sd9t~<;sqNV? zFK1AFVvVg%D?!oPE^P0J;8*lV;+Ba3;aHsOOxXCBMBQc8X>$>b>$ia|1Md zd(np~uc!E_(&?y;QXh3j++l$;MNaw|f8vU}dA|~+BxcM~Zxu^(*PYGdYA*)M|VY{Av+YiXdwI`atCYH+47d zkM<1jdn@PLAUH;=OsiU`Xn@!SdSKig)isz&-h;Aspjb^YBgQ+snD?Li+}w!ckhDEEkK-6fIZ9kki*?MmObAKtU_72=KzP_^e=nH|nt zum{DRa+j0MuGiGCyISExU3q(F9R!;)`C8QKEM@Y>?>uKKWRKn1-)SC*C<* zIXhs&WbcyYfKcon%h6f#jzMl>HEg1WEM~063-_;^7g4xlDWH_US*1CWcuLwOp5r0z z&i}12VOY%FW5ikgUfs7cN7MV&5OEU5#1q53>cv}g$BcbBH#e`V@W(qvvO|_oMsFWT s(97DWz2D8!ndHB+EH|>gdjCget|oOfI)0v&>vmwkP=?F6gY26B0eYs4Bme*a 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 73de395ca12569e35314e54ffb5b3e1b6784966e..f1d17bc2ceec20bb7a3e3fdad594925e34313c44 100644 GIT binary patch literal 2516 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 KQz{4y^?w3DO#B!C literal 1664 zcmai#S!_*F6o&s5xzcil(i%%*ek5_^it#~HiKMyFnqmquJ(waQRa1+qTxqMu);uI4 zR4EBhcq53R2p)ulCsUD#gc#!6`?k0DBKq*3z4zH`_}9PJK1b3wH7H*NifWQ3Do<;a zqg)lLNb9s#G2K$2@rtOAdMiVn)j?tPQa5EQOX&(pwhpuh1?0xy`a z0MoGNofUyh&-6pVi-q^AX5P&5p67$*=kv|u; zoDz;x2h_>%I;}y+iRc+c*L<&En8*=VyB-l^icRHtj@3tyU}vjY{lZeV#pTo#KQCtX zLqB=D5|ps|404p_cLy`y4feLGSIeoo6OEyjJBh`jxU3txuB*BN$D95v;@#>hb?21n z8I8v0A{YaXfoe^5U8DJboNG&E^g>c?vYmK!0a>80wez(sOv=}s%drS~6)#)=1UG4$ zziqBNqA*1TDv1%RPWO3MG~KaO)?E|+jre@PD~kUldaTSAX)E3RhCY8!r;9s1*OvQQ zkJ24gaF|8h0eXp7;Qb1GhrZ(NI2)@5qYG4$l;MBz-94C09NBLC8t|9x`3GmOsvWW; zUfmki!$Ye1hox+Yi`R5U@!RwaYj>-|^r&ov&)1v&C{Zze5~zZjcc@b3O-jTo`bv~9 z`kJI~9yU9$t-vzCvzQ33%g*|Y&-Dr|8?7HbbCuq?@s~z|MFcKE;-CIN_p#I zS2jg0OW{&ZPFZ&ATx_YYDoA1~ZE*Z-I5FIpIo>OI{)RXO%CU9zJJqiFXI-n>NYB-% z50+*~f%PC;J{+)aDelts!gc2wVqU!Zn4ZOgu3uO7ZP>P}Cud-& wrf4MZKvUbhK-Q6hl2aF2`qTMgqT@~4i5qwBJ$mx#c5!_9_M_s#vtwoBe_fg#0ssI2 delta 162 zcmWN}yGlX<007X#6_P%{AQU6)Mn140A|f=4nzD#MaEQ=s2m;g6DYL9BYtp5`@8|<{ zJ;Rv>f5CWld(nlc9T5u>QqtnqY)Z;l5|gv8rZJam6*oeklWMsCtmj4DkE~@Y`Zg53 x8Mt)f!=b!e_ulQ=bKuCSGgt1sPW}twmSasVZBIIe9_Ig-ZzJa(b(NI;&H&<%8|wf7 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 27c2af77bb362edb51b24b8fce210a568e0d3134..91037e3c3c6e90f517851ef0f58090c8a5868d29 100644 GIT binary patch literal 878 zcmV~$17H{c00gnWpKaS_XLYu1+qP}nwr$(CZQF^YLprP@I;vw@ri0q2o!YOBT2Fng z(OLp&OcN$DiCyev9|t(dAr5n#i;QOiHyO(~=5dF)+~z6Ic+MC;Qj=P|;3Z*r*Bs0t9MYj3PSdqe{}5n;5R~lnpeMcPO&|K&4&rG`TX%F<_jF&6^+GT8 zO271%utXp#8OTT$s#1;W)SxMISjQeNaG9&z#z>*NSdJeTBKb%t*g4GA4DfH zDQM4Xj&YKE{BjgWb!KOEZq3#lE!A$;%_dZ=f5t+zxZ z2|36~ehN~EA{3<!UvDv%csn zsYpvzYS56zd^2})a$CnpLQ;~EoD@V+iMiZT5QV5ne+Dyzp$uaV{I<8Zcq=Nj&#sHjg#f`$aQ-Th3q!Zo9P9OSl zR{`Y0g*BGda#&8wWx378@>pKWXZfvw6|_R;YHnJr9b_RZxrsC^i6yn<=Ae}d)L;Em zA_5FgMlqT(jAb0-`A4Evv`Si`%M_suXSv2RZPj-DCLj4JKv7Cjp1O24nQ4{wX}=CA zToJmjXg$zFJ97#w4ya_Xp0{^2;~OhL=ep>w`j@VmEu( z%R!EFhD%)GIyZU32Yy%zbFws+-ZEMi%VycFu$8cqR@N$Op%!VGmdi)}TCa`Tq;0yc z8;aB&-PIF4Rg7Zwo;2j8Eaj*|HL6pSTGXZijc7tsn$eQ3bf+i1=*u9MvJ4*r*}xX| vv7ZBkaF`2R<|+?)#ABZFnJ;`Lj(C1qD$8J*EVDUV5i4rNth`k)FM0e21?%FR 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 fdc760e22eb6f2bb212c678681612708fdf542a3..1267567f0575dd288832e2da37e43b9eece65f41 100644 GIT binary patch literal 17406 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 AKL7v# diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/readableNames.props b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/readableNames.props index 1d6248b1c57..2a6614d80d5 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/readableNames.props +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/readableNames.props @@ -326,6 +326,7 @@ StaticImportOnDemandDeclaration=StaticImportOnDemandDeclaration StaticImportOnDemandDeclarationName=StaticImportOnDemandDeclarationName StaticInitializer=StaticInitializer StaticOnly=StaticOnly +StringTemplateExpression=TemplateExpression SwitchBlock=SwitchBlock SwitchBlockStatement=SwitchBlockStatement SwitchBlockStatements=SwitchBlockStatements diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/util/Messages.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/util/Messages.java index a8bd9a43407..42175f1db5d 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/util/Messages.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/util/Messages.java @@ -126,6 +126,7 @@ private Messages() { public static String record_patterns; public static String unnammed_patterns_and_vars; public static String unnamed_classes_and_instance_main_methods; + public static String string_templates; static { initializeMessages(BUNDLE_NAME, Messages.class); diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java index 181e73a3dab..89a276f2305 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java @@ -2324,7 +2324,7 @@ public void test0049() { "----------\n"; String expected14ProblemLog = expected13ProblemLog; - + String token = (this.complianceLevel >= ClassFileConstants.JDK21) ? "." : "<"; String expected15ProblemLog = "----------\n" + "1. ERROR in X.java (at line 6)\n" + @@ -2335,7 +2335,7 @@ public void test0049() { "2. ERROR in X.java (at line 6)\n" + " public @MyAnn(\"\",\"\") class Test { \n" + " ^\n" + - "Syntax error on token \",\", < expected\n" + + "Syntax error on token \",\", "+ token +" expected\n" + "----------\n" + "3. ERROR in X.java (at line 6)\n" + " public @MyAnn(\"\",\"\") class Test { \n" + diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java index 25ace840caf..ba1bf6ec9dc 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2020 IBM Corporation and others. + * Copyright (c) 2000, 2023 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java index 50509de87fb..f15cdd9ad30 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java @@ -33,7 +33,7 @@ public ScannerTest(String name) { // Static initializer to specify tests subset using TESTS_* static variables // All specified tests which does not belong to the class are skipped... static { -// TESTS_NAMES = new String[] { "test000" }; +// TESTS_NAMES = new String[] { "test051" }; // TESTS_NUMBERS = new int[] { 60 }; // TESTS_RANGE = new int[] { 54, -1 }; } diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StringTemplateTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StringTemplateTest.java new file mode 100644 index 00000000000..ab79348aca9 --- /dev/null +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StringTemplateTest.java @@ -0,0 +1,1681 @@ +/******************************************************************************* + * Copyright (c) 2023 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.core.tests.compiler.regression; + +import java.util.Map; + +import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; + +import junit.framework.Test; + +public class StringTemplateTest extends AbstractRegressionTest { + + static { +// TESTS_NAMES = new String[] { "test003" }; + } + private static final JavacTestOptions JAVAC_OPTIONS = new JavacTestOptions("--enable-preview -source 21"); + private static final String[] VMARGS = new String[] {"--enable-preview"}; + public static Class testClass() { + return StringTemplateTest.class; + } + public static Test suite() { + return buildMinimalComplianceTestSuite(testClass(), F_21); + } + public StringTemplateTest(String testName){ + super(testName); + } + protected Map getCompilerOptions() { + return getCompilerOptions(true); + } + // Enables the tests to run individually + protected Map getCompilerOptions(boolean previewFlag) { + Map defaultOptions = super.getCompilerOptions(); + defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_21); + defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_21); + defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_21); + defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED); + return defaultOptions; + } + protected void runConformTest(String[] testFiles, String expectedOutput) { + runConformTest(testFiles, expectedOutput, null, VMARGS, new JavacTestOptions("-source 21 --enable-preview")); + } + @Override + protected void runConformTest(String[] testFiles, String expectedOutput, Map customOptions) { + if(!isJRE21Plus) + return; + runConformTest(testFiles, expectedOutput, customOptions, VMARGS, JAVAC_OPTIONS); + } + protected void runNegativeTest( + String[] testFiles, + String expectedCompilerLog, + String javacLog, + String[] classLibraries, + boolean shouldFlushOutputDirectory, + Map customOptions) { + Runner runner = new Runner(); + runner.testFiles = testFiles; + runner.expectedCompilerLog = expectedCompilerLog; + runner.javacTestOptions = JAVAC_OPTIONS; + runner.customOptions = customOptions; + runner.expectedJavacOutputString = javacLog; + runner.runNegativeTest(); + } + public void test001() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"A simple String\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "A simple String"); + } + public void test001a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + ""); + } + public void test002() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\"\"\n" + + " A simple Text block\"\"\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "A simple Text block"); + } + public void test002a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\"\"\n" + + " \"\"\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + ""); + } + public void test003() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String firstName = \"Bill\";\n" + + " String lastName = \"Duck\";\n" + + " String fullName = STR.\"Name: \\{firstName} \\{lastName}\";\n" + + " System.out.println(fullName);\n" + + " }\n" + + "}" + }, + "Name: Bill Duck"); + } + public void test004() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " int x = 10, y = 20;\n" + + " String s = STR.\"\\{x} + \\{y} = \\{x + y}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "10 + 20 = 30"); + } + public void test005() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String[] fruit = { \"apples\", \"oranges\", \"peaches\" };\n" + + " String s = STR.\"\\{fruit[0]}, \\{STR.\"\\{fruit[1]}, \\{fruit[2]}\"}\\u002e\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "apples, oranges, peaches."); + } + public void test006() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String[] fruit = { \"apples\", \"oranges\", \"peaches\" };\n" + + " String tmp = STR.\"\\{fruit[1]}, \\{fruit[2]}\";" + + " String s = STR.\"\\{fruit[0]}, \\{tmp}\";" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "apples, oranges, peaches"); + } + public void test007() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String[] fruit = { \"apples\", \"oranges\", \"peaches\" };\n" + + " String tmp = STR.\"\\{fruit[1]}, \\{fruit[2]}\";" + + " String s = STR.\"\\{fruit[0]}, \\{tmp}\";" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "apples, oranges, peaches"); + } + // Simple text block with embedded expressions + public void test008() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " @SuppressWarnings(\"nls\")\n" + + " public static void main(String[] args) {\n" + + " String name = \"Joan Smith\";\n" + + " String phone = \"555-123-4567\";\n" + + " String address = \"1 Maple Drive, Anytown\";\n" + + " String doc = STR.\"\"\"\n" + + " {\n" + + " \"name\": \"\\{name}\",\n" + + " \"phone\": \"\\{phone}\",\n" + + " \"address\": \"\\{address}\"\n" + + " };\"\"\";\n" + + " System.out.println(doc);\n" + + " }\n" + + "}" + }, + "{\n" + + " \"name\": \"Joan Smith\",\n" + + " \"phone\": \"555-123-4567\",\n" + + " \"address\": \"1 Maple Drive, Anytown\"\n" + + "};"); + } + // Simple text block with a string literal as an embedded expression + public void test008a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + "@SuppressWarnings(\"nls\")\n" + + "public static void main(String[] args) {\n" + + " String name = \"Joan Smith\";\n" + + " String phone = \"555-123-4567\";\n" + + " String address = \"1 Maple Drive, Anytown\";\n" + + " String doc = STR.\"\"\"\n" + + " {\n" + + " \"name\": \"\\{STR.\"\\{name}\"}\",\n" + + " \"phone\": \"\\{phone}\",\n" + + " \"address\": \"\\{address}\" \n" + + " };\"\"\";\n" + + " System.out.println(doc);\n" + + " } \n" + + "} " + }, + "{\n" + + " \"name\": \"Joan Smith\",\n" + + " \"phone\": \"555-123-4567\",\n" + + " \"address\": \"1 Maple Drive, Anytown\"\n" + + "};"); + } + // Simple text block with a nested text block as an embedded expression + public void test008b() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " @SuppressWarnings(\"nls\")\n" + + " public static void main(String[] args) {\n" + + " String name = \"Joan Smith\";\n" + + " String phone = \"555-123-4567\";\n" + + " String address = \"1 Maple Drive, Anytown\";\n" + + " String doc = STR.\"\"\"\n" + + " {\n" + + " \"name\": \"\\{\n" + + " STR.\"\"\"\n" + + " \\{name}\"\"\"}\",\n" + + " \"phone\": \"\\{phone}\",\n" + + " \"address\": \"\\{address}\" \n" + + " };\"\"\";\n" + + " System.out.println(doc);\n" + + " } \n" + + "} " + }, + "{\n" + + " \"name\": \"Joan Smith\",\n" + + " \"phone\": \"555-123-4567\",\n" + + " \"address\": \"1 Maple Drive, Anytown\"\n" + + "};"); + } + // Same as above, but the nested text block has a smaller indentation than the outer + // But this should not influence the formatting of the outer block + public void test008c() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " @SuppressWarnings(\"nls\")\n" + + " public static void main(String[] args) {\n" + + " String name = \"Joan Smith\";\n" + + " String phone = \"555-123-4567\";\n" + + " String address = \"1 Maple Drive, Anytown\";\n" + + " String doc = STR.\"\"\"\n" + + " {\n" + + " \"name\": \"\\{\n" + + " STR.\"\"\"\n" + + "\\{name}\"\"\"}\",\n" + + " \"phone\": \"\\{phone}\",\n" + + " \"address\": \"\\{address}\" \n" + + " };\"\"\";\n" + + " System.out.println(doc);\n" + + " } \n" + + "} " + }, + "{\n" + + " \"name\": \"Joan Smith\",\n" + + " \"phone\": \"555-123-4567\",\n" + + " \"address\": \"1 Maple Drive, Anytown\"\n" + + "};"); + } + public void test009() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String last = \"Duck\";\n" + + " foo(STR.\"\\{first} \\{last}\");\n" + + " }\n" + + " public static void foo(String s) {\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "Bill Duck"); + } + public void test010() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String last = \"Duck\";\n" + + " String s = STR.\"\\{first}\" + \" \" + STR.\"\\{last}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "Bill Duck"); + } + public void test011() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String last = \"Duck\";\n" + + " foo(STR.\"\\{first}\" + \" \" + STR.\"\\{last}\");\n" + + " }\n" + + " public static void foo(String s) {\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "Bill Duck"); + } + // Template Expresion with an empty string fragment + public void test012() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = STR.\"\\{first + STR.\"\"}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "Bill"); + } + // Template Expression with an empty embedded expression + public void test013() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\\{}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "null"); + } + // Template Expression with an null literal as expression + public void test013a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\\{null}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "null"); + } + public void test014() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\\{STR.\"\\{STR.\"abc\"}\"}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "abc"); + } + public void test015() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = \"Name is \\{first}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String s = \"Name is \\{first}\";\n" + + " ^^^^^^^^^^^^^^^^^^\n" + + "Syntax error on token \"StringTemplate\", invalid Expression\n" + + "----------\n"); + } + public void test015a() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = \"\"\"\n" + + "Name is \\{first}\"\"\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String s = \"\"\"\n" + + "Name is \\{first}\"\"\";\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Syntax error on token \"TextBlockTemplate\", invalid Expression\n" + + "----------\n"); + } + public void test016() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = \"\"\"\n" + + " \\{first}\n" + + " \"\"\"\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String s = \"\"\"\n" + + " \\{first}\n" + + " \"\"\"\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Syntax error on token \"TextBlockTemplate\", delete this token\n" + + "----------\n"); + } + public void test017() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = STR1.\"\"\"\n" + + " \\{first} \n" + + " \"\"\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String s = STR1.\"\"\"\n" + + " ^^^^\n" + + "STR1 cannot be resolved\n" + + "----------\n"); + } + public void test018() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " static final StringTemplate.Processor PROC = null;\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " boolean isNull = false;\n" + + " try {\n" + + " String s = PROC.\"\\{first}\";\n" + + " } catch (NullPointerException e) {\n" + + " isNull = true;\n" + + " }" + + " System.out.println(isNull);\n" + + " }\n" + + "}" + }, + "true"); + } + public void test019() { + runNegativeTest( + new String[] { + "X.java", + "import static java.lang.StringTemplate.STR;\n" + + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = STR.\"\\{first}\";\n" + + " System.out.println(s1);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. WARNING in X.java (at line 1)\n" + + " import static java.lang.StringTemplate.STR;\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + + "The import java.lang.StringTemplate.STR is never used\n" + + "----------\n" + + "2. ERROR in X.java (at line 6)\n" + + " System.out.println(s1);\n" + + " ^^\n" + + "s1 cannot be resolved to a variable\n" + + "----------\n"); + } + public void test020() { + runNegativeTest( + new String[] { + "X.java", + "import java.lang.StringTemplate.STR;\n" + + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String first = \"Bill\";\n" + + " String s = STR.\"\\{first}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 1)\n" + + " import java.lang.StringTemplate.STR;\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + + "The import java.lang.StringTemplate.STR cannot be resolved\n" + + "----------\n"); + } + // Tests that use a non-name expression for processors + public void test021() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String argv[]) {\n" + + " int i1 = 1; int i2 = 2; int i3 = 3; int i4 = 4; int i5 = 5; int i6 = 6; int i7 = 7; int i8 = 8; int i9 = 9; int i10 = 10; int i11 = 11; int i12 = 12; int i13 = 13; int i14 = 14; int i15 = 15; int i16 = 16; int i17 = 17; int i18 = 18; int i19 = 19; int i20 = 20; int i21 = 21; int i22 = 22; int i23 = 23; int i24 = 24; int i25 = 25; int i26 = 26; int i27 = 27; int i28 = 28; int i29 = 29; int i30 = 30; int i31 = 31; int i32 = 32; int i33 = 33; int i34 = 34; int i35 = 35; int i36 = 36; int i37 = 37; int i38 = 38; int i39 = 39; int i40 = 40; int i41 = 41; int i42 = 42; int i43 = 43; int i44 = 44; int i45 = 45; int i46 = 46; int i47 = 47; int i48 = 48; int i49 = 49; int i50 = 50; int i51 = 51; int i52 = 52; int i53 = 53; int i54 = 54; int i55 = 55; int i56 = 56; int i57 = 57; int i58 = 58; int i59 = 59; int i60 = 60; int i61 = 61; int i62 = 62; int i63 = 63; int i64 = 64; int i65 = 65; int i66 = 66; int i67 = 67; int i68 = 68; int i69 = 69; int i70 = 70; int i71 = 71; int i72 = 72; int i73 = 73; int i74 = 74; int i75 = 75; int i76 = 76; int i77 = 77; int i78 = 78; int i79 = 79; int i80 = 80; int i81 = 81; int i82 = 82; int i83 = 83; int i84 = 84; int i85 = 85; int i86 = 86; int i87 = 87; int i88 = 88; int i89 = 89; int i90 = 90; int i91 = 91; int i92 = 92; int i93 = 93; int i94 = 94; int i95 = 95; int i96 = 96; int i97 = 97; int i98 = 98; int i99 = 99; int i100 = 100; \n" + + " String s = (new MyProcessor()).\"s1\\{i1}s2\\{i2}s3\\{i3}s4\\{i4}s5\\{i5}s6\\{i6}s7\\{i7}s8\\{i8}s9\\{i9}s10\\{i10}s11\\{i11}s12\\{i12}s13\\{i13}s14\\{i14}s15\\{i15}s16\\{i16}s17\\{i17}s18\\{i18}s19\\{i19}s20\\{i20}s21\\{i21}s22\\{i22}s23\\{i23}s24\\{i24}s25\\{i25}s26\\{i26}s27\\{i27}s28\\{i28}s29\\{i29}s30\\{i30}s31\\{i31}s32\\{i32}s33\\{i33}s34\\{i34}s35\\{i35}s36\\{i36}s37\\{i37}s38\\{i38}s39\\{i39}s40\\{i40}s41\\{i41}s42\\{i42}s43\\{i43}s44\\{i44}s45\\{i45}s46\\{i46}s47\\{i47}s48\\{i48}s49\\{i49}s50\\{i50}s51\\{i51}s52\\{i52}s53\\{i53}s54\\{i54}s55\\{i55}s56\\{i56}s57\\{i57}s58\\{i58}s59\\{i59}s60\\{i60}s61\\{i61}s62\\{i62}s63\\{i63}s64\\{i64}s65\\{i65}s66\\{i66}s67\\{i67}s68\\{i68}s69\\{i69}s70\\{i70}s71\\{i71}s72\\{i72}s73\\{i73}s74\\{i74}s75\\{i75}s76\\{i76}s77\\{i77}s78\\{i78}s79\\{i79}s80\\{i80}s81\\{i81}s82\\{i82}s83\\{i83}s84\\{i84}s85\\{i85}s86\\{i86}s87\\{i87}s88\\{i88}s89\\{i89}s90\\{i90}s91\\{i91}s92\\{i92}s93\\{i93}s94\\{i94}s95\\{i95}s96\\{i96}s97\\{i97}s98\\{i98}s99\\{i99}s100\\{i100}s101\";\n" + + " System.out.println(s.equals(\"\\\"s11s22s33s44s55s66s77s88s99s1010s1111s1212s1313s1414s1515s1616s1717s1818s1919s2020s2121s2222s2323s2424s2525s2626s2727s2828s2929s3030s3131s3232s3333s3434s3535s3636s3737s3838s3939s4040s4141s4242s4343s4444s4545s4646s4747s4848s4949s5050s5151s5252s5353s5454s5555s5656s5757s5858s5959s6060s6161s6262s6363s6464s6565s6666s6767s6868s6969s7070s7171s7272s7373s7474s7575s7676s7777s7878s7979s8080s8181s8282s8383s8484s8585s8686s8787s8888s8989s9090s9191s9292s9393s9494s9595s9696s9797s9898s9999s100100s101\\\"\"));\n" + + " }\n" + + "}\n" + + "class MyProcessor implements StringTemplate.Processor {\n" + + " public String process(StringTemplate st) {\n" + + " return \"\\\"\" + STR.process(st) + \"\\\"\";\n" + + " };\n" + + "}" + }, + "true"); + } + public void test021a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String argv[]) {\n" + + " String s = getProc().\"\\{\"pass\"}\";\n" + + " System.out.println(s);\n" + + " }\n" + + " public static StringTemplate.Processor getProc() {\n" + + " return StringTemplate.STR;\n" + + " }\n" + + "}" + }, + "pass"); + } + public void test022() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String argv[]) {\n" + + " int i1 = 1; int i2 = 2; int i3 = 3; int i4 = 4; int i5 = 5; int i6 = 6; int i7 = 7; int i8 = 8; int i9 = 9; int i10 = 10; int i11 = 11; int i12 = 12; int i13 = 13; int i14 = 14; int i15 = 15; int i16 = 16; int i17 = 17; int i18 = 18; int i19 = 19; int i20 = 20; int i21 = 21; int i22 = 22; int i23 = 23; int i24 = 24; int i25 = 25; int i26 = 26; int i27 = 27; int i28 = 28; int i29 = 29; int i30 = 30; int i31 = 31; int i32 = 32; int i33 = 33; int i34 = 34; int i35 = 35; int i36 = 36; int i37 = 37; int i38 = 38; int i39 = 39; int i40 = 40; int i41 = 41; int i42 = 42; int i43 = 43; int i44 = 44; int i45 = 45; int i46 = 46; int i47 = 47; int i48 = 48; int i49 = 49; int i50 = 50; int i51 = 51; int i52 = 52; int i53 = 53; int i54 = 54; int i55 = 55; int i56 = 56; int i57 = 57; int i58 = 58; int i59 = 59; int i60 = 60; int i61 = 61; int i62 = 62; int i63 = 63; int i64 = 64; int i65 = 65; int i66 = 66; int i67 = 67; int i68 = 68; int i69 = 69; int i70 = 70; int i71 = 71; int i72 = 72; int i73 = 73; int i74 = 74; int i75 = 75; int i76 = 76; int i77 = 77; int i78 = 78; int i79 = 79; int i80 = 80; int i81 = 81; int i82 = 82; int i83 = 83; int i84 = 84; int i85 = 85; int i86 = 86; int i87 = 87; int i88 = 88; int i89 = 89; int i90 = 90; int i91 = 91; int i92 = 92; int i93 = 93; int i94 = 94; int i95 = 95; int i96 = 96; int i97 = 97; int i98 = 98; int i99 = 99; int i100 = 100; \n" + + " MyProcessor tProcessor = new MyProcessor();\n" + + " String s = tProcessor.\"s1\\{i1}s2\\{i2}s3\\{i3}s4\\{i4}s5\\{i5}s6\\{i6}s7\\{i7}s8\\{i8}s9\\{i9}s10\\{i10}s11\\{i11}s12\\{i12}s13\\{i13}s14\\{i14}s15\\{i15}s16\\{i16}s17\\{i17}s18\\{i18}s19\\{i19}s20\\{i20}s21\\{i21}s22\\{i22}s23\\{i23}s24\\{i24}s25\\{i25}s26\\{i26}s27\\{i27}s28\\{i28}s29\\{i29}s30\\{i30}s31\\{i31}s32\\{i32}s33\\{i33}s34\\{i34}s35\\{i35}s36\\{i36}s37\\{i37}s38\\{i38}s39\\{i39}s40\\{i40}s41\\{i41}s42\\{i42}s43\\{i43}s44\\{i44}s45\\{i45}s46\\{i46}s47\\{i47}s48\\{i48}s49\\{i49}s50\\{i50}s51\\{i51}s52\\{i52}s53\\{i53}s54\\{i54}s55\\{i55}s56\\{i56}s57\\{i57}s58\\{i58}s59\\{i59}s60\\{i60}s61\\{i61}s62\\{i62}s63\\{i63}s64\\{i64}s65\\{i65}s66\\{i66}s67\\{i67}s68\\{i68}s69\\{i69}s70\\{i70}s71\\{i71}s72\\{i72}s73\\{i73}s74\\{i74}s75\\{i75}s76\\{i76}s77\\{i77}s78\\{i78}s79\\{i79}s80\\{i80}s81\\{i81}s82\\{i82}s83\\{i83}s84\\{i84}s85\\{i85}s86\\{i86}s87\\{i87}s88\\{i88}s89\\{i89}s90\\{i90}s91\\{i91}s92\\{i92}s93\\{i93}s94\\{i94}s95\\{i95}s96\\{i96}s97\\{i97}s98\\{i98}s99\\{i99}s100\\{i100}s101\";\n" + + " System.out.println(s.equals(\"\\\"s11s22s33s44s55s66s77s88s99s1010s1111s1212s1313s1414s1515s1616s1717s1818s1919s2020s2121s2222s2323s2424s2525s2626s2727s2828s2929s3030s3131s3232s3333s3434s3535s3636s3737s3838s3939s4040s4141s4242s4343s4444s4545s4646s4747s4848s4949s5050s5151s5252s5353s5454s5555s5656s5757s5858s5959s6060s6161s6262s6363s6464s6565s6666s6767s6868s6969s7070s7171s7272s7373s7474s7575s7676s7777s7878s7979s8080s8181s8282s8383s8484s8585s8686s8787s8888s8989s9090s9191s9292s9393s9494s9595s9696s9797s9898s9999s100100s101\\\"\"));\n" + + " }\n" + + "}\n" + + "class MyProcessor implements StringTemplate.Processor {\n" + + " public String process(StringTemplate st) {\n" + + " return \"\\\"\" + STR.process(st) + \"\\\"\";\n" + + " };\n" + + "}" + }, + "true"); + } + public void test023() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\\{STR.\"\\{STR.\"}abc{\"}\"}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "}abc{"); + } + public void test024() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String s = STR.\"\\{STR.\"}\\{STR.\"}abc{\"}\"}{\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "}}abc{{"); + } + // String template + // embedded expression contains an instantiation and method invocation + // closing } is unicode + public void test025() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " static String value1 = \"1\";\n" + + " private String getValue() {\n" + + " return value1;\n" + + " }\n" + + "\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"{}\\{(new X()).getValue()\\u007d\";\n" + + " System.out.println(str.equals(\"{}1\"));\n" + + " }\n" + + "}" + }, + "true"); + } + // Same as above, but the invoked metod is absent + public void test025a() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " static String value1 = \"1\";\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"{}\\{(new X()).getValue()\\u007d\";\n" + + " System.out.println(str.equals(\"{}1\"));\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String str = STR.\"{}\\{(new X()).getValue()\\u007d\";\n" + + " ^^^^^^^^\n" + + "The method getValue() is undefined for the type X\n" + + "----------\n"); + } + // Text block template + // embedded expression contains an instantiation and method invocation + // closing } is unicode + public void test026() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " static String value1 = \"1\";\n" + + " private String getValue() {\n" + + " return value1;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"\"\"\n" + + " {}\\{(new X()).getValue()\\u007d\"\"\";\n" + + " System.out.println(str.equals(\"{}1\"));\n" + + " }\n" + + "}" + }, + "true"); + } + public void test026a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " static String value1 = \"1\";\n" + + " private String getValue() {\n" + + " return value1;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"\"\"\n" + + " {}\\{(new X()).getValue()}\"\"\";\n" + + " System.out.println(str.equals(\"{}1\"));\n" + + " }\n" + + "}" + }, + "true"); + } + // Same as above, but the invoked method is absent + public void test026b() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " static String value1 = \"1\";\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"\"\"\n" + + " {}\\{(new X()).getValue()\\u007d\"\"\";\n" + + " System.out.println(str.equals(\"{}1\"));\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 5)\n" + + " {}\\{(new X()).getValue()\\u007d\"\"\";\n" + + " ^^^^^^^^\n" + + "The method getValue() is undefined for the type X\n" + + "----------\n"); + } + // Flow analysis related tests + public void test027() { + Map options = getCompilerOptions(false); + String old1 = options.get(CompilerOptions.OPTION_ReportUnusedLocal); + options.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.ERROR); + try { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String abc = \"abc\";\n" + + " String s = STR.\"A simple String: \\{abc}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "A simple String: abc", + options); + } finally { + options.put(CompilerOptions.OPTION_ReportUnusedLocal, old1); + } + } + public void test027a() { + Map options = getCompilerOptions(false); + String old1 = options.get(CompilerOptions.OPTION_ReportUnusedLocal); + options.put(CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.ERROR); + try { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " String abc = \"abc\"; // unused\n" + + " String def = \"def\";\n" + + " String s = STR.\"A simple String \\{def}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 3)\n" + + " String abc = \"abc\"; // unused\n" + + " ^^^\n" + + "The value of the local variable abc is not used\n" + + "----------\n", + null, + false, + options); + } finally { + options.put(CompilerOptions.OPTION_ReportUnusedLocal, old1); + } + } + public void test028() { + Map options = getCompilerOptions(false); + String old1 = options.get(CompilerOptions.OPTION_ReportUnusedPrivateMember); + options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + try { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " private String abc = \"abc\"; // unused\n" + + " private String def = \"def\"; // unused\n" + + " public void main(String[] args) {\n" + + " String s = STR.\"A simple String \\{def}\";\n" + + " System.out.println(s);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 2)\n" + + " private String abc = \"abc\"; // unused\n" + + " ^^^\n" + + "The value of the field X.abc is not used\n" + + "----------\n", + null, + false, + options); + } finally { + options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, old1); + } + } + public void test028a() { + Map options = getCompilerOptions(false); + String old1 = options.get(CompilerOptions.OPTION_ReportUnusedPrivateMember); + options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + try { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " private String abc = \"abc\"; // unused\n" + + " private String def = \"def\"; // unused\n" + + " public void main(String[] args) {\n" + + " String s = STR.\"A simple String \\{clone(def)}\";\n" + + " System.out.println(s);\n" + + " }\n" + + " public String clone(String s) {\n" + + " return s;\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 2)\n" + + " private String abc = \"abc\"; // unused\n" + + " ^^^\n" + + "The value of the field X.abc is not used\n" + + "----------\n", + null, + false, + options); + } finally { + options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, old1); + } + } + public void test028b() { + Map options = getCompilerOptions(false); + String old1 = options.get(CompilerOptions.OPTION_ReportUnusedPrivateMember); + options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + try { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " private String abc = \"abc\"; // unused\n" + + " public void main(String[] args) {\n" + + " String s = STR.\"A simple String \\{clone(abc)}\";\n" + + " System.out.println(s);\n" + + " }\n" + + " public String clone(String s) {\n" + + " return \"clone\";\n" + + " }\n" + + "}" + }, + "A simple String clone", + options); + } finally { + options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, old1); + } + } + public void test029() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " static int CONST = 0;\n" + + " private static int foo() {\n" + + " return CONST;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"{\\{new Object() { class Test { int i; Test() { i = foo();}}}.new Test().i\\u007d}\";\n" + + " System.out.println(str.equals(\"{0}\"));\n" + + " }\n" + + "}" + }, + "true"); + } + // Same as above with a text block + public void test030() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " static int CONST = 0;\n" + + " private static int foo() {\n" + + " return CONST;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String str = STR.\"\"\"\n" + + " {\\{new Object() { class Test { int i; Test() { i = foo();}}}.new Test().i\\u007d}\"\"\";\n" + + " System.out.println(str.equals(\"{0}\"));\n" + + " }\n" + + "}" + }, + "true"); + } + public void test031() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String argv[]) {\n" + + " String abc;\n" + + " String temp = STR.\"\\{abc = \"abc\"}\\{abc}\";\n" + + " System.out.println(temp);\n" + + " }\n" + + "}" + }, + "abcabc"); + } + public void test032() { + runNegativeTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String argv[]) {\n" + + " String abc;\n" + + " String temp = STR.\"\\{}\\{abc}\";\n" + + " System.out.println(temp);\n" + + " }\n" + + "}" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String temp = STR.\"\\{}\\{abc}\";\n" + + " ^^^\n" + + "The local variable abc may not have been initialized\n" + + "----------\n"); + } + // Test that newlines and such are allowed in strings if they are inside embedded expressions + public void test033() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public boolean compare(String s1, String s2) { + return s1.equals(s2); + } + public static void main(String args[]) { + X t = new X(); + System.out.println(t.compare(STR."\\{ 10 + + 10/10 + + args.length }", "11")); + } +}""" + }, + "true"); + } + // Test that leading whitespace in the line preceding expressions + // are removed + public void test034() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + private final static int LF = (char) 0x000A; + private static boolean compare(String s) { + char[] chars = new char[] {LF,'a','b','c','d'}; + if (chars.length != s.length()) + return false; + for (int i = 0; i < chars.length; i++) { + if(chars[i] != s.charAt(i)) { + return false; + } + } + return true; + } + public static void main(String argv[]) { + String str = \"abcd\"; //$NON-NLS-1$ + String textBlock = STR.\""" +\s\s\s +\\{str}\""";//$NON-NLS-1$ + System.out.println(compare(textBlock)); + } +}""" + }, + "true"); + } + // Test that leading whitespace in the line preceding expressions + // are removed + // Using regular strings instead of text blocks for testcase because + // the formatter removes the whitespaces + public void test035() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " private final static int LF = (char) 0x000A;\n" + + " private static boolean compare(String s) {\n" + + " char[] chars = new char[] {LF,'a','b','c','d'};\n" + + " if (chars.length != s.length())\n" + + " return false;\n" + + " for (int i = 0; i < s.length(); i++) {\n" + + " if(chars[i] != s.charAt(i)) {\n" + + " return false;\n" + + " }\n" + + " }\n" + + " return true;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String abcd = \"abcd\"; //$NON-NLS-1$\n" + + " String textBlock = STR.\"\"\"\n" + + " \n" + + "\\{abcd}\"\"\";//$NON-NLS-1$\n" + + " System.out.println(compare(textBlock));\n" + + " }\n" + + "}" + }, + "true"); + } + // Test that leading whitespace in the line preceding expressions + // are removed + // Using regular strings instead of text blocks for testcase because of a bug + // that doesn't allow the sequence \40\40\40 at the end of a line + public void test036() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " private final static int LF = (char) 0x000A;\n" + + " private static boolean compare(String s) {\n" + + " char[] chars = new char[] {' ', ' ', ' ', LF, 'a','b','c','d'};\n" + + " if (chars.length != s.length())\n" + + " return false;\n" + + " for (int i = 0; i < s.length(); i++) {\n" + + " if(chars[i] != s.charAt(i)) {\n" + + " return false;\n" + + " }\n" + + " }\n" + + " return true;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String abcd = \"abcd\"; //$NON-NLS-1$\n" + + " String textBlock = STR.\"\"\"\n" + + "\\40\\40\\40\n" + + "\\{abcd}\"\"\";//$NON-NLS-1$\n" + + " System.out.println(compare(textBlock));\n" + + " }\n" + + "}" + }, + "true"); + } + // Same as above, but with a simple text block + public void test037() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " private final static int LF = (char) 0x000A;\n" + + " private static boolean compare(String s) {\n" + + " char[] chars = new char[] {' ', ' ', ' ', LF, 'a','b','c','d'};\n" + + " if (chars.length != s.length())\n" + + " return false;\n" + + " for (int i = 0; i < s.length(); i++) {\n" + + " if(chars[i] != s.charAt(i)) {\n" + + " return false;\n" + + " }\n" + + " }\n" + + " return true;\n" + + " }\n" + + " public static void main(String argv[]) {\n" + + " String abcd = \"abcd\"; //$NON-NLS-1$\n" + + " String textBlock = \"\"\"\n" + + "\\40\\40\\40\n" + + "abcd\"\"\";//$NON-NLS-1$\n" + + " System.out.println(compare(textBlock));\n" + + " }\n" + + "}" + }, + "true"); + } + public void test038() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + private static boolean compare(String s) { + return s.equals(\""" +abc def +ghij.\"""); + } + public static void main(String args[]) { + String text = \""" +\ +abc \ +def +ghij\ +.\"""; + + System.out.println(compare(text)); + } +}""" + }, + "true"); + } + public void test039() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public boolean compare() { + String val = "Test"; + String str = STR.\""" + Color Shape + Red Circle + Green Square + Blue Triangle One \\{val} Two \\{val} One "String" \"""; + return (str.equals(\""" + Color Shape + Red Circle + Green Square + Blue Triangle One Test Two Test One "String" \""")); + } + public static void main(String argv[]) { + X t = new X(); + System.out.println(t.compare()); + } +}""" + }, + "true"); + } + public void test040() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { +String s = STR.\""" + xyz + \\{ +\""" + abc + def\"""}123 + \"""; + System.out.println(s); + } +}""" + }, + "xyz\n" + + " abc\n" + + "def123"); + } + public void test041() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { +String s = STR.\""" + xyz + \\{ +\""" + abc + def\"""}123 + \"""; + System.out.println(s); + } +}""" + }, + "xyz\n" + + "abc\n" + + "def123"); + } + public void test0041() { + runConformTest(new String[]{ + "X.java", + """ +public class X { + static final String s = STR.\""" + 1 + \\{ +\""" + 2 + 3 + 4 + 5\"""} + \"""; + public static void main(String[] args) { + try { + throw new RuntimeException(\"This is line 13.\"); + } catch(Exception e) { + e.printStackTrace(System.out); + } + } +}""" + }, + "java.lang.RuntimeException: This is line 13.\n" + + " at X.main(X.java:13)"); + } + public void test042() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + private static boolean compare(String textBlock) { + return textBlock.equals("abc def."); + } + public static void main(String argv[]) { + String textBlock = \""" +\ +abc \\ +def\\ +.\"""; + System.out.println(compare(textBlock)); + } +}""" + }, + "true", + getCompilerOptions()); + } + public void test043() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + static final String s = STR.\""" + 1\\u005c{ +"." + + 2 + + 3 + + 4 + + "5"}\"""; + public static void main(String[] args) { + System.out.println(s.equals("1.2345")); + } +}""" + }, + "true", + getCompilerOptions()); + } + // 3 levels of nested test blocks with string templates and a method invocation + public void test044() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { +String s = STR.\""" + \\{ + STR.\""" +\\{ + clone(\""" + abcdefg + \""") +}\""" + + }\"""; + System.out.println(s.equals("clone")); + } + public static String clone(String s) { + return "clone"; //$NON-NLS-1$ + } +} +""" + }, + "true", + getCompilerOptions()); + } + // Tests with RAW template processor + public void test045() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String name = "Jay"; + StringTemplate template = StringTemplate.RAW."\\{name}"; + String s = StringTemplate.STR.process(template); + System.out.println(s); + } + public static StringTemplate.Processor getProc() { + return StringTemplate.STR; + } + } +""" + }, + "Jay" +); + } + public void test046() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String name = "Jay"; + String s = StringTemplate.STR.process(StringTemplate.RAW."\\{name}"); + System.out.println(s); + } + public static StringTemplate.Processor getProc() { + return StringTemplate.STR; + } + } +""" + }, + "Jay" +); + } + public void test047() { + runNegativeTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String name = "Jay"; + String template = StringTemplate.RAW."\\{name}"; + } + public static StringTemplate.Processor getProc() { + return StringTemplate.STR; + } + } +""" + }, + "----------\n" + + "1. ERROR in X.java (at line 4)\n" + + " String template = StringTemplate.RAW.\"\\{name}\";\n" + + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + + "Type mismatch: cannot convert from StringTemplate to String\n" + + "----------\n" +); + } + // pass string template with embedded expression as argument to a method invocation + public void test048() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String name = "Jay"; + System.out.println(stringify(StringTemplate.RAW."\\{name}")); + } + public static String stringify(StringTemplate template) { + System.out.println(template.toString()); + return STR.process(template); + } +} +""" + }, + "StringTemplate{ fragments = [ \"\", \"\" ], values = [Jay] }\n" + + "Jay" +); + } + public void test049() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String str = "\\0\\1\\2\\3\\4\\5\\6\\7\\10\\11\\12\\13\\14\\15\\16\\17\\20\\21\\22\\23\\24\\25\\26\\27\\30\\31\\32\\33\\34\\35\\36\\37\\40\\41\\42\\43\\44\\45\\46\\47\\50\\51\\52\\53\\54\\55\\56\\57\\60\\61\\62\\63\\64\\65\\66\\67\\70\\71\\72\\73\\74\\75\\76\\77\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377"; + System.out.println(str.length()); + for (int i=0; i<=0xFF; i++) { + if (i != (int)str.charAt(i)) { + System.out.println("Error in octal escape :" + i); + } + } + } +}""" + }, + "256"); + } + // Test String template with backslash and { in unicode form + public void test050() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String name = "Jay"; + String s1 = STR.\"Hello \\u005c\\u007bname}\\{"!"}"; + System.out.println(s1); + } + } + """ + }, + "Hello Jay!" + ); + } + //Test text block template with backslash and { in unicode form + public void test051() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String name = "Jay"; + String s1 = STR.\""" + Hello \\u005c\\u007bname}\\{"!"} +\"""; + System.out.println(s1); + } +} +""" + }, + "Hello Jay!" + ); + } + //Same as above, but check for correct positioning of expressions + public void test052() { + runNegativeTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String name = "Jay"; + String s1 = STR.\""" + Hello \\u005c\\u007bnames}\\{"!"} +\"""; + System.out.println(s1); + } +} +""" + }, + "----------\n" + + "1. ERROR in X.java (at line 5)\n" + + " Hello \\u005c\\u007bnames}\\{\"!\"}\n" + + " ^^^^^\n" + + "names cannot be resolved to a variable\n" + + "----------\n" + ); + } + public void test053() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String name = "Jay"; + String s1 = STR.\""" + Hello Jay!\"""; + System.out.println(s1); + } +} +""" + }, + "Hello Jay!" + ); + } + public void test0054() { + runNegativeTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String s; + String s1 = STR.\""" +Hello \\{ +s +} +\\{ +s +} + +!\"""; + String s2 = "" + s + ""; + System.out.println(s1); + } + } +""" + }, + "----------\n" + + "1. ERROR in X.java (at line 6)\n" + + " s\n" + + " ^\n" + + "The local variable s may not have been initialized\n" + + "----------\n" + + "2. ERROR in X.java (at line 9)\n" + + " s\n" + + " ^\n" + + "The local variable s may not have been initialized\n" + + "----------\n" + + "3. ERROR in X.java (at line 13)\n" + + " String s2 = \"\" + s + \"\";\n" + + " ^\n" + + "The local variable s may not have been initialized\n" + + "----------\n" + ); + } + public void test0055() { + runNegativeTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String s; + String s1 = STR.\""" + Hello \\{ + s + } + \\{ + s="Jay" + } + + !\"""; + String s2 = "" + s + ""; + System.out.println(s1); + } + } + """ + }, + "----------\n" + + "1. ERROR in X.java (at line 6)\n" + + " s\n" + + " ^\n" + + "The local variable s may not have been initialized\n" + + "----------\n" + ); + } + public void test0056() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String s = "Jay"; + String s1 = STR.\""" + Hello\\{ + s="" + } \\{ + s="Jay"}!\"""; + String s2 = "" + s + ""; + System.out.println(s1); + } + } + """ + }, + "Hello Jay!" + ); + } + public void test0057() { + runNegativeTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String s = "Jay"; + String s1 = STR.\""" + Hello \\{ + s="Jay"; + } + \\{ + s="Jay" + }!\"""; + String s2 = "" + s + ""; + System.out.println(s1); + } + } + """ + }, + "----------\n" + + "1. ERROR in X.java (at line 6)\n" + + " s=\"Jay\";\n" + + " ^\n" + + "Syntax error on token \";\", delete this token\n" + + "----------\n" + + "2. ERROR in X.java (at line 7)\n" + + " }\n" + + " ^\n" + + "Text block is not properly closed with the delimiter\n" + + "----------\n" + ); + } + // Test with assignment of the outer string literal inside the template expression + public void test0058() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String first = "Jay"; + String last = "A"; + String greet = STR."Hello \\{ + greet = "Changed" + } \\{last}!"; + System.out.println(greet); + } + } + """ + }, + "Hello Changed A!" + ); + } + public void test0059() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String first = "Jay"; + String last = "A"; + String greet = STR."Hello \\{ + greet = "Changed" + } \\{greet}!"; + System.out.println(greet); + } + } + """ + }, + "Hello Changed Changed!" + ); + } + // Test with read of the outer string literal inside the template expression + public void test0060() { + runNegativeTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String first = "Jay"; + String last = "A"; + String greet = STR."Hello \\{ + greet + } \\{last}!"; + System.out.println(greet); + } + } + """ + }, + "----------\n" + + "1. ERROR in X.java (at line 6)\n" + + " greet\n" + + " ^^^^^\n" + + "The local variable greet may not have been initialized\n" + + "----------\n" + ); + } +} diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java index 72d147bc6fe..a538740df3d 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java @@ -236,6 +236,7 @@ public static Test suite() { since_21.add(RecordPatternTest.class); // since_21.add(UnnammedPatternsAndVarsTest.class); Enable after implementation. since_21.add(NullAnnotationTests18.class); + since_21.add(StringTemplateTest.class); // Build final test suite TestSuite all = new TestSuite(TestAll.class.getName()); diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TextBlockTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TextBlockTest.java index 95dda688251..c0266d1df4b 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TextBlockTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TextBlockTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2022 IBM Corporation and others. + * Copyright (c) 2020, 2023 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -219,6 +219,25 @@ public void test006() { "abc\\def", null); } + /* + * positive - escaped '\' + */ + public void test006a() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static String textb = \"\"\"\n" + + "\\u007Babc\\\\def" + + "\"\"\";\n" + + " public static void main(String[] args) {\n" + + " System.out.print(textb);\n" + + " }\n" + + "}\n" + }, + "{abc\\def", + null); + } /* * Positive - Multi line text block with varying indentation * and \n @@ -1676,4 +1695,97 @@ public void test023() { null, new String[] {"--enable-preview"}); } + public void testIssue544_1() { + runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String argv[]) {\n" + + " String outer = \"\"\"\n" + + " String inner = \\\"\"\"\n" + + " \\\"\"\";\"\"\";\n" + + " System.out.println(outer.length());\n" + + " }\n" + + "}\n" + }, + "30", + getCompilerOptions()); + } + public void testIssue544_2() { + runConformTest( + new String[] { + "X.java", + """ + public class X { + public static void main(String argv[]) { + String outer = \""" +String text = \\\""" + String text = \\\""" + String text = \\\""" + A text block inside a text block at level 3 + \\\"""; + \\\"""; + \\\""";\"""; + System.out.println(outer.equals( + "String text = \\"\\"\\"\\n" + + " String text = \\"\\"\\"\\n" + + " String text = \\"\\"\\"\\n" + + " A text block inside a text block at level 3\\n" + + " \\"\\"\\";\\n" + + " \\"\\"\\";\\n" + + " \\"\\"\\";" + )); + } + }""" + }, + "true", + getCompilerOptions()); + } + public void testIssue544_3() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String s = \""" +\ +\"""; + System.out.println(compare(s)); + } + private static boolean compare(String s) { + return s.equals(\"\"); + } +} + """ + }, + "true", + getCompilerOptions()); + } + public void testIssue544_4() { + runConformTest( + new String[] { + "X.java", + """ +public class X { + public static void main(String argv[]) { + String s = \""" +\ +some \ +newline +string\ +.\"""; + System.out.println(compare(s)); + } + private static boolean compare(String s) { + return s.equals(\""" +some newline +string.\"""); + } +} + """ + }, + "true", + getCompilerOptions()); + } } diff --git a/org.eclipse.jdt.core.tests.model/JCL/JclMin21.jar b/org.eclipse.jdt.core.tests.model/JCL/JclMin21.jar new file mode 100644 index 0000000000000000000000000000000000000000..9612c028a476dbe037f579963b56a064d3014eb0 GIT binary patch literal 33578 zcmc(I_jg>!m1ZMH0w6L#5;b-Yg z)va5%>IJ;+Zu9W;H<^4*rj`GA@qerinH>K7OrEBW#{Syemd>VpYz0iFZgqgKY1w*! zlnWol!E>N+kal24ZD&hUV_$z>M-%qykUiVma`PaaXv@u#g13I$TL7s@auy`@p&L2P z?GTy=OyF**Cr%&dxAd* zweB~&y*hoDntQ7Q_U@oGK-=doma~~*FW=O{N&7 zJ0G3bvbw&#)wg9aPp;%mFHdf6mSdkaP?fj0_eJl#JnuB`*&Xl5IPXF4k|u9#0B-!K zK?%=q9g3v!&?fH^WNtkV7FyoqJxjMN*zpc(@}AUoIyiib+iyRlm54Cfn zN4p`bf&B$|O@Wo9WX2)s4b-BA&7;a|8Di>S*Jel0Aw%5O!@L%2qGm z>UZwxM{OoSr){;ej*R;GNlTx3W81ts?Xq4wuIhC|9Q+3BrQtpLuDx5KwR7`mk8f@#)H>aeq!vJ;JGzwAxJRMx?FZ zw9Pj-f|C+Pz|*AA2TAc#d3&OA#AK_((E|ZC3t&-#h(^AV-0v2J;+ZKhZ-b%g;7r)AZd;BXzEAHLY#0&NS{#o7WkQ#cG_NIyey)M6;R#h8Q~6&F>F@?@J-4OjB5` zWEyJCB7nzcg3W8$+h2mHba6nGEeD^Ijee4(Uy(H4)F}dW#(nhYiC$$dWDh}=pkID< z*B&B~SEr|jZ1xHex_MNFq^wW%P}g+TIWH7!r+{_8dM`MTwi6BBZjl_gZ%@P+l2Oo% z6hkx!e7YeB`o|LQk}+)$K%9?TRE zmdd!spcMlG4#!V}`#6vJ&ZC^8Lv74tIl05ysu}Lkx4pi;X4x`3yTo0mJKbFOAuaUY zJyIL+isL6ctAVv0`!xx|ZMy;~4rlM>h)nTHY2fWUF*8B;Z4X>FR2{{1rFVXe>Zf3s>nq=2UbmR1C()rYw6Ujv z&el!iaW=dI=xLs3Ji#+S9A0X;F_r;dYT$Bk-+1n$Cnp%NT0o3V`_*8kwE3&+zQ6wQ z>tBt}p6wu5EM@q>;kbl3&<+uxl zD7;NWTmqSukx!%}Gu{02XOIAsl7OEQDYtH8Y%6)T&!eo)9^kQwi%h{b9chRz1sqBu zJRb?G59}?K(|sy8e)AK?^fRD|t4TD2FU<&?W*NZ2EBN>c`UT@LK>MY!t)-v}HB@-! z{b?{@f;IsHK(G9R$lw*4JK!z{Zi9FljJ;*#0872 zOlsNEc7%`%$_l#u2$I;POQ(@EUj{2q<*14T(Pkgs57v3)<~#|Y^qr@`5G{P+xcZe- zqs6jj`2$x@jsYL~oFFmp_^?k;xbWccE0_D&+i|nA*{2T zn!%A(YYy3e&mHN{=q_wz?YVAno=myPsW`~%rD~i&21eo!!ApX`Xpay^NkLO1Qbs{X z)FQ+2-p~%GUO!W(XW5=dUMlizBL$sSW3Xj`2j$sK!qlC#)_h3oY&I=UxC8 zN&tr_2i#O!b1#y;Y6hy!WU!TtDRwg8;|Ep-%3190+B`6X;AsxWX^=K?>zBAK%gg4u z$>rMVY4hf$(-N0sbPe=}UcO^j;P&&9g7^OsYaCj_^46o;u@E?F9Wj;CK@SHqK@4gn zIy1?-v>9~!6Baf&Sis1y*(nE-eWFr!>R4M{*jlsn;f|8|ztURgP*WGyI?$TpD1^=+ zcQ?yLy8mY^#}Ra#kByj+a zhD=ONc$WEa_?xbRSsjr%=a||Wz`?6wVPVaBrwIi`#^72rDLW#rj(C_%QF>2Y-7?Ra z)eN*PJF=cNDtJvZdZ-98`ubB*{<$rs6*U=*AV7itat5bA0mqLc7{bOt|NdjHa|WWC zmDezGvw6$scLHh4J&=GAxNLJa4+$r2@9uhVQ@~D~icf4w!G2N|5}-TdI#);A`x(hn zz!`*LTTKcPj8=)DVb(D#`7j1aPeS{Qg|z~>B0V3NI#Ob0Yv2A#PZ1I-Ipk7@lYX<> zlhesw(lWRsu3Sg%5R`uYm;Wdm)D(lvo1c{u;j6EznO99rrjv~9tDxUL{sVAj0}ETi zamR@gILm2<4x)j5!NA_M_WGC4uyK~`U2UT#P_aw+zxsG&8n%?2PwpObXFTRYMv%+3 zSn3McS}`r{h?Ya-s5N`?vT6biHQoib!M+*-0n|3-#@?kK!KLuCBAh((j%*b%0}0gy z?^S+6)6vy|vUV_9RWMwERGIWB3G$SbSMLkr~ z=(?U=*CgL3$=u;$Vvf?S?I^`V{$g5lZOhR~HRy3-Ab7ZTp=CCxA-Vfkk4Q<;`Jze&00I3CsEq}qBLN{x zT#_h%v=>7PZ1VOxkz!teNKZ}$DN#u;KPf`v2aj-|1ggN6S;NsO@H%yZo;De#+{(k@ z=0eDXyS5*M6QDURucJ95jmc5h$aVFKA#RlYbf-QHx{dsNk5>Ma@n&c83V2Eg8 zRb#i!=eal+(C2|HR(FXZ4mf)4p7Siv$k}=OuaH)OOeYvq0dMw?BU+Fd$Y)1zKY&4_ ze6;tR7M1Y zFzvV*au5j5vYl<~$I-$FuUR(%l6{fgxz@KmJ>RroUY_~SEDx<=6lcMG#fNTv3xeH| zIkW>ooHv(xdJvL4Aa%@+vyEqLk5^`+kqcoX*g}AZ#8&whA!!4#3Adk8P8Neq3|UAh zN1}!pPL@DfX1B*B5&L>$!eeT9DpQyTE!)CLl)Fq0yz+P2HV9{uz>K50hYlyu>>8=}y6u%I+m(v`WBQV zNX@{wBxO8rE9Wvn0TSATsUrd!Sxb+}n_ontY$x0IBvI?M8ZHll7~!u;IXF)>mL=J% zS}BC49xxTr9m_fD7_Bw!#k^yvXgtl3+SJ~Y|>@$W@W5a$TuF4E#dYq2&|=5>)D85&<^O|zV(@x zU-Yy`ePs!3am1oO52QaBmJMnM%iahu1BOeMt{t<*vM{6G#n9BU;@u%y)}8ei&~@`f zUnkn&&Mmjmzj!-G`){pnuw>@sGSg&lL( zIxgS&o{G~_X1g02=uS1^m7)urYuNmyh+jX4v^WCH4V3WyeM!DF#KyS~o^JZtw>T96 zbD&r538+@4E9bF}SZDBbL=ZA2kePnvh>Mar2nmD0OHDN>AbG1e(S6dNzAmUrM7mW0 zmJzF>vZb@{rTb8DplZ>R!-&_h9%Y{(GY-Nz<+U$^0fVVvWg>&m4|8f8w!4V7Wh}wx zg({kh8-U;eNpC;KX`%3~FMw}L z5jck_FgOK9lN5mZrX#>Fc`*hkhl2z(gR(c?_~*X2ztjTpohQLmtstqO9

r*8l; z@-qaN_ks1*Zuh9ZD?-+YQs;qONmmwV133Yb{fezu-h6d(HT{rYH4bUV>xsiZ;vrF{ zRv*VDHVuxeGi@6L+iiW_I`6pG8L@v@v&DJ~v?ey?&F^W7Z0q6^wD?K(rSZDUq^1#U z)NG_*^Wlxyh1EG(^HE17`_(!vaYXe@EB_2d#`Bc#{ND{pI(Wsmm*&^AaDP$(;SB)26lkHqGrN=#(BVJER8wpk*D$s25B@nq`Y=8@MJ zMB0*?gFt6M00#-@$Lo?6?r=wU8zrkljvFCMPasfc=)6^WqTjr-zKrL0DczPeKJ~Oc z%|Gn6zRy<^au~Lx>EnRf8w}n@vdb~aVdx0!92&ym#lbjMeKca9aWgikCqi~NBMIa@ zrz|}Ukof z>@urX*zXN4U>_azbg~WKKy*$@QArg5CpN_2EO2Au%t0JVZPU;UaC6gGYQ ztVrvJk}edib@i1-B10q4K$&c+;Pw}f7?D^oc=_NY&yYRDemE$m+{Z;*AV`oLb1m>x z6b;)KeXxThPRf@mZ6h>LIbkm=wlczY3-V4N?F3CRMl)OhWAA(u{Dc3t``-OXD;VYh z4)*#*k%eESG0J-AaD7^NVK%##NVlX?+rB^q%%<7H7G3*4e3bu

MmKx3bnaDZ9E5289gukUb=ykeC2r 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 G_J08o6UDy( literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.core.tests.model/JCL/JclMin21.zip b/org.eclipse.jdt.core.tests.model/JCL/JclMin21.zip new file mode 100644 index 0000000000000000000000000000000000000000..53591b791a6482da5bbaa7540e4f8523fc28ad0e GIT binary patch literal 30981 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

r*8l; z@-qaN_ks1*Zuh9ZD?-+YQs;qONmmwV133Yb{fezu-h6d(HT{rYH4bUV>xsiZ;vrF{ zRv*VDHVuxeGi@6L+iiW_I`6pG8L@v@v&DJ~v?ey?&F^W7Z0q6^wD?K(rSZDUq^1#U z)NG_*^Wlxyh1EG(^HE17`_(!vaYXe@EB_2d#`Bc#{ND{pI(Wsmm*&^AaDP$(;SB)26lkHqGrN=#(BVJER8wpk*D$s25B@nq`Y=8@MJ zMB0*?gFt6M00#-@$Lo?6?r=wU8zrkljvFCMPasfc=)6^WqTjr-zKrL0DczPeKJ~Oc z%|Gn6zRy<^au~Lx>EnRf8w}n@vdb~aVdx0!92&ym#lbjMeKca9aWgikCqi~NBMIa@ zrz|}Ukof z>@urX*zXN4U>_azbg~WKKy*$@QArg5CpN_2EO2Au%t0JVZPU;UaC6gGYQ ztVrvJk}edib@i1-B10q4K$&c+;Pw}f7?D^oc=_NY&yYRDemE$m+{Z;*AV`oLb1m>x z6b;)KeXxThPRf@mZ6h>LIbkm=wlczY3-V4N?F3CRMl)OhWAA(u{Dc3t``-OXD;VYh z4)*#*k%eESG0J-AaD7^NVK%##NVlX?+rB^q%%<7H7G3*4e3bu

MmKx3bnaDZ9E5289gukUb=ykeC2r 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 G_J08o6UDy( literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.core.tests.model/JCL/converterJclMin21src.zip b/org.eclipse.jdt.core.tests.model/JCL/converterJclMin21src.zip new file mode 100644 index 0000000000000000000000000000000000000000..53591b791a6482da5bbaa7540e4f8523fc28ad0e GIT binary patch literal 30981 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 0) this.currentPosition = lastQuotePos; - this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.rawStart; + this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.textBlockOffset; throw unterminatedTextBlock(); } catch (IndexOutOfBoundsException e) { - this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.rawStart; + this.currentPosition = (lastQuotePos > 0) ? lastQuotePos : this.startPosition + this.textBlockOffset; if(this.startPosition <= this.cursorLocation && this.cursorLocation < this.currentPosition) { // complete inside a string literal diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/compiler/ITerminalSymbols.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/compiler/ITerminalSymbols.java index b52713d1b0c..542f3104ccc 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/compiler/ITerminalSymbols.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/compiler/ITerminalSymbols.java @@ -99,11 +99,20 @@ public interface ITerminalSymbols { int TokenNameDoubleLiteral = 43; int TokenNameCharacterLiteral = 44; int TokenNameStringLiteral = 45; + /** + * @since 3.37 + * @noreference This field is not intended to be referenced by clients. + */ + int TokenNameStringTemplate = 47; /** * @since 3.20 - * @noreference This class is not intended to be referenced by clients as it is a part of Java preview feature. */ int TokenNameTextBlock = 46; + /** + * @since 3.37 + * @noreference This field is not intended to be referenced by clients. + */ + int TokenNameTextBlockTemplate = 48; int TokenNamePLUS_PLUS = 1; int TokenNameMINUS_MINUS = 2; int TokenNameEQUAL_EQUAL = 35; diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java index dfc4c5b8bdb..a137558e93f 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java @@ -204,8 +204,10 @@ private int translateTokenToTerminalSymbol(int nextToken) throws InvalidInputExc case TerminalTokens.TokenNameSEMICOLON : nextToken = ITerminalSymbols.TokenNameSEMICOLON; break; case TerminalTokens.TokenNameSingleQuoteStringLiteral : nextToken = ITerminalSymbols.TokenNameSingleQuoteStringLiteral; break; case TerminalTokens.TokenNameStringLiteral : nextToken = ITerminalSymbols.TokenNameStringLiteral; break; + case TerminalTokens.TokenNameStringTemplate : nextToken = ITerminalSymbols.TokenNameStringTemplate; break; case TerminalTokens.TokenNameTWIDDLE : nextToken = ITerminalSymbols.TokenNameTWIDDLE; break; case TerminalTokens.TokenNameTextBlock : nextToken = ITerminalSymbols.TokenNameTextBlock; break; + case TerminalTokens.TokenNameTextBlockTemplate : nextToken = ITerminalSymbols.TokenNameTextBlockTemplate; break; case TerminalTokens.TokenNameUNSIGNED_RIGHT_SHIFT : nextToken = ITerminalSymbols.TokenNameUNSIGNED_RIGHT_SHIFT; break; case TerminalTokens.TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL : nextToken = ITerminalSymbols.TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL; break; case TerminalTokens.TokenNameWHITESPACE : nextToken = ITerminalSymbols.TokenNameWHITESPACE; break; diff --git a/org.eclipse.jdt.core/pom.xml b/org.eclipse.jdt.core/pom.xml index d2fa299189e..af5fc8d987b 100644 --- a/org.eclipse.jdt.core/pom.xml +++ b/org.eclipse.jdt.core/pom.xml @@ -17,7 +17,7 @@ 4.31.0-SNAPSHOT org.eclipse.jdt.core - 3.36.100-SNAPSHOT + 3.37.0-SNAPSHOT eclipse-plugin